在編寫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)。 |
沒有留言:
張貼留言