Shell及Script

Shell

shell是用戶與作業系統之間的交互層,用戶修改其環境,設置或取消shell的環境變量,迎合用戶的需要和愛好http://fanqiang.chinaunix.net/a1/b4/20010518/145747_b.html

我們在使用電腦的時候﹐基本上就是和 shell 打交道﹐而不是直接和 kernel 溝通﹐更不是直接控制硬體。www.study-area.org/linux/system/linux_shell.htm

變數(variable)

以特定的名稱來儲存設定值,以供日後程式所需。使用者可自行定義一些變數。

環境變數(Environment variables)

在系統中或是在Shell的一些環境設定,就叫做境變數,這些變數通常用大寫英文字母表示。常用的變數有PWD(目前工作目錄路徑)、PATH(命令搜尋路徑)。此外,我們可在命列使用env把目前的環境變數列出,或是set把目前的所有的變數列出,這包含了環境變數及屬於使用者個人的。

#env

 

#set

另外有兩個變數比較特殊,一個是$(目前shell的PID),一個是?(上個命令的狀態傳回值,若執行無誤,則傳回0。若有誤,則傳回非0值)。

如何設定變數

在設定變數之前,有幾點需注意 :

以上取材自鳥哥的 Linux 私房菜

將變數vtest的內容設為bashshelltest
#vtest=bashshelltest

將變數vtest的內容設為bash shell test

#vtest="bash shell test"

將變數vtest的內容清空

#unset vtest

如何使用變數

在命列使用echo即可

顯示變數vtest
#echo $vtest
bash shell test

顯示目前shell的PID(數字不一定會和範例的一樣)
#echo $$
12021

顯示上個命令的狀態傳回值,若執行無誤,則傳回0。若有誤,則傳回非0值
#ls -l
-rw-rw-rw-  1  fbean  fbean   13   12月 15  2004  test.txt
drwxrwxr-x  2  fbean  fbean  4096   12月 15  2004  tmp
#echo $?
0
#ls *.gz -l
ls: *.gz: 沒有此一檔案或目錄
#echo $?
1

 

 

 

 

Scripts

類似在M$的作業系統下的批次檔(.bat),可以讓使用者將一些想做的事(一堆指令),利用一個scripts檔案完成,當然,還可以像寫程式一樣,經由變數或一些條件的判別,來做重覆且規則的事。

何謂Shell Scripts? Scripts大集合

使用之前要注意的事:

scripts檔案如何被執行?

範例:

  1. 將quota的設定複製給多個user
    #!bin/bash
    #Duplicate quota setting for other users
    #This script shuold be executed by root
    #revised by ldc on 2006/06/20
    #ex: sh -v quota_dup.sh s9220301 s92 20302 20442
    # sample | prefix | begin number | end number
    for((i=$3; i<=$4; i=i+1))
    do
    edquota -p $1 $2$i
    done
  2. 將重要資料壓縮後,上傳至別台ftp server,搭配cron更可顯出效用。
    #!/bin/bash
    #My first backup cron scripts
    tar -zcf /backup/etc.tar.gz /etc
    tar -zcf /backup/home.tar.gz /home
    tar -zcf /backup/boot.tar.gz /boot
    tar -zcf /backup/usr_local.tar.gz /usr/local
    tar -zcf /backup/var.tar.gz /var --exclude /var/www/std_html/download

    # WHAT IS THIS:
    # This program will automatically put the backup file
    # from this host to another hosts
    #
    # HISTORY
    # When Who What
    # 2002/10/14 VBird First time to release
    #
    ###################################################################
    # 1. input your FTP's ID and PassWord
    host="別台ftp server之host name"
    id="別台ftp server之id"
    pw='別台ftp server之密碼'
    # 2. what is the correct and remote working directory
    basedir="/backup" # 本機上面的欲上傳檔案路徑
    remodir="/backup_ftp/backup/testbackup" # 遠端主機欲備份的目錄
    cd $basedir
    ###################################################################
    # 5. 底下就是 ftp 自動連線並操作上傳手續的 script !
    # ftp -n "$host" > "$basedir"/"$filename".log 2> "$basedir"/"$filename".log <<EOC
    ftp -n "$host" <<EOC
    user $id $pw
    binary
    cd $remodir
    #put $filename
    prompt
    mput *.gz
    bye
    EOC