在編寫Shell Script時,常常會用到一些奇奇怪怪的符號,
這些符號也往往不是那麼直觀,
不過,在了解這些符號的用處之後,便愈來愈喜歡在shell script裡使用,
底下列出一些常見的符號,之後再慢慢增加
自動定義的變數
| 變數名稱 | 說明 |
| $? | 表示上一個指令的離開狀況,一般指令正常離開會傳回 0。不正常離開則會傳回 1、2 等數值。 |
| $$ | 這一個 shell 的 process ID number |
| $! | 最後一個在背景執行的程式的 process number |
| $- | 這個參數包含了傳遞給 shell 旗標 (flag)。 |
| $1 | 代表第一個參數,$2 則為第二個參數,依此類推。而 $0 為這個 shell script 的檔名。 |
| $# | 執行時,給這個 Shell Script 參數的個數 |
| $* | 包含所有輸入的參數,$@ 即代表 $1, $2,....直到所有參數結束。$* 將所有參數無間隔的連在一起,存成一個單一的參數。也就是說 $* 代表了 "$1 $2 $3..."。 |
| $@ | 包含所有輸入的參數,$@ 即代表 $1, $2,....直到所有參數結束。$@ 用將所有參數以空白為間隔,存在 $@ 中。也就是說 $@ 代表了 "$1" "$2" "$3"....。 |
對於變數的處理
| 運算式 | 說明 |
| ${var:-word} | 如果變數 var 尚未設定或是 null,則將使用 word 這個值,但不改變 var 變數的內容。 |
| ${var:=word} | 如果變數 var 尚未設定或是 null,則變數 var 的內容將等於 word 這個字串,並使用這個新的值。 |
| ${var:?word} | 如果變數 var 已經設定了,而且不是 null,則將使用變數 var。否則則印出 word 這個字串,並強制離開程式。我們可以設定一個字串 "Parameter null or not set" 來在變數未設定時印出,並終止程式。 |
| ${var:+word} | 如果變數 var 已經設定了,而且不是 null,則以 word 這個字串取代它,否則就不取代。 |
四則運算
| 類別 | 語法 | 說明 |
| 條件判斷 | expr1 \| expr2 | 如果 expr1 不是零或 null 則傳回 expr1,否則傳回 expr2。 |
| expr1 \& expr2 | 如果 expr1 及 expr2 都不為零或 null,則傳回 expr1,否則傳回 0。 | |
| 四則運算 | expr1 + expr2 | 傳回 expr1 加 expr2 後的值。 |
| expr1 - expr2 | 傳回 expr1 減 expr2 後的值。 | |
| expr1\* expr2 | 傳回 expr1 乘 expr2 後的值。 | |
| expr1 / expr2 | 傳回 expr1 除 expr2 後的值。 | |
| expr1 % expr2 | 傳回 expr1 除 expr2 的餘數。 | |
| 大小判斷 | expr1 \> expr2 | 如果 expr1 大於 expr2 則傳回 1,否則傳回 0。如果 expr1 及 expr2 都是數字,則是以數字大小判斷,否則是以文字判斷。以下皆同。 |
| expr1 \< expr2 | 如果 expr1 小於 expr2 則傳回 1,否則傳回 0。 | |
| expr1 = expr2 | 如果 expr1 等於 expr2 則傳回 1,否則傳回 0。 | |
| expr1 != expr2 | 如果 expr1 不等於 expr2 則傳回 1,否則傳回 0。 | |
| expr1 \>= expr2 | 如果 expr1 大於或等於 expr2 則傳回 1,否則傳回 0。 | |
| expr1 \<= expr2 | 如果 expr1 小於或等於 expr2 則傳回 1,否則傳回 0。 | |
| 文字處理 | expr1 : expr2 | 比較一固定字串,即 regular expression。可以使用下列字元來輔助:. 匹配一個字元。 $ 找字串的結尾。 [list] 找符合 list 中的任何字串。 * 找尋 0 個或一個以上在 * 之前的字。 \( \) 傳回括號中所匹配的字串。 |
簡單的判斷式
| 條件式 | 說明 |
| a && b | 如果 a 是真,則執行 b。如果 a 是假,則不執行 b。 |
| a || b | 如果 a 是假,則執行 b。如果 a 是真,則不執行 b。 |
以 test 命令對於字串或數字的比較
| 表達式 | 說明 |
| -n str1 | 如果字串 str1 的長度大於 0 則傳回 true。 |
| -z str1 | 如果字串 str1 的長度等於 0 則傳回 true。 |
| str1 | 如果字串 str1 不是 null 則傳回 true。 |
| str1 = str2 | 如果 str1 等於 str2 則傳回 true。等號二邊有空白。 |
| str1 != str2 | 如果 str1 不等於 str2 則傳回 true。!= 的二邊有空白。 |
| a -eq b | Equal,等於。a 等於 b 則傳回真 (true)。 |
| a -ne b | Not equal,不等於。a 不等於 b 則傳回真 (true)。 |
| a -gt b | Grwater than,大於。a 大於 b 則傳回真 (true)。 |
| a -lt b | Less Than,小於。a 小於 b 則傳回真 (true)。 |
| a -ge b | Greater or equal,大於或等於。a 大於或等於 b 則傳回真 (true)。 |
| a -le b | Less or equal,小於或等於。a 小於或等於 b 則傳回真 (true)。 |
以 test 命令對於檔案的處理
| 用法 | 說明 |
| -d file | 如果 file 為目錄則傳回真(true)。 |
| -f file | 如果 file 是一般的檔案則傳回真(true)。 |
| -L file | 如果 file 是連結檔則傳回真(true)。 |
| -b file | 如果 file 是區塊特別檔則傳回真(true)。 |
| -c file | 如果 file 是字元特別檔則傳回真(true)。 |
| -u file | 如果file 的 SUID 己設定則傳回真(true)。 |
| -g file | 如果file 的 SGID 己設定則傳回真(true)。 |
| -k file | 如果file 的 sticky bit 己設定則傳回真(true)。 |
| -s file | 如果 file 的檔案長度大於 0 則傳回真(true)。 |
| -r file | 如果 file 可以讀則傳回真(true)。 |
| -w file | 如果 file 可以寫則傳回真(true)。 |
| -x file | 如果 file 可以執行則傳回真(true)。 |
沒有留言:
張貼留言