搜尋此網誌

2011年11月2日 星期三

Shell Script裡常用的指令


在編寫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 bEqual,等於。a 等於 b 則傳回真 (true)。
a -ne bNot equal,不等於。a 不等於 b 則傳回真 (true)。
a -gt bGrwater than,大於。a 大於 b 則傳回真 (true)。
a -lt bLess Than,小於。a 小於 b 則傳回真 (true)。
a -ge bGreater or equal,大於或等於。a 大於或等於 b 則傳回真 (true)。
a -le bLess 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)。



沒有留言:

張貼留言