| Shell 設計入門: | ||
|---|---|---|
| <<< Previous | Next >>> | |
何者為真?何者為假? Bash shell 以其傳回值來決定,若傳回 0 則為真,傳回非0為假。
命令的傳回值會儲存一個特殊的變數裡:$?
例:[ 3 -gt 2 ]
echo $? 會傳回 0,因為 3 的確大於 2
例:[ 3 -gt 12 ]
echo $? 會傳回 1,因為 3 不大於 12
在此 [ ] 代表真假值判斷, [ 和 3 、 12 和 ] 之間必需要有空白; -gt 是 greater then 之意,即大於。
真假值的判斷有三大類:檔案測試、字串比較以及整數比較,以下列示之:
-a file
若檔案存在則為真
-b file
若檔案存在且是一個特殊的 block 檔則為真
-c file
若檔案存在且是一個特殊的 character 檔則為真
-d file
若若檔案存在且是一個目錄則為真
-e file
若檔案存在則為真
-f file
若檔案存在且是一個正規的檔案則為真
-g file
若檔案存在且其 set-group-id 位元已設定則為真
-h file
若檔案存在且是一個符號連結檔則為真
-k file
若檔案存在且其 "sticky" 位元已設定則為真
-p file
若檔案存在且是一個 named pipe (FIFO) 則為真
-r file
若檔案存在且具有讀取的權限則為真
-s file
若檔案存在且檔案大小大於 0 則為真
-t fd
若檔案代碼 fd 已開啟且連接到一個終端機則為真
-u file
若檔案存在且s set-user-id 位元已設定則為真
-w file
若檔案存在且具有寫入的權限則為真
-x file
若檔案存在且具有執行的權限則為真
-O file
若檔案存在且被有效的使用者id所擁有則為真
-G file
若檔案存在且被有效的群組id所擁有則為真
-L file
若檔案存在且是一個符號連結檔則為真
-S file
若檔案存在且是一個 socket 則為真
-N file
若檔案存在且自它上次被讀取之後已被修改過了則為真
file1 -nt file2
若 file1 比 file2 新則為真
file1 -ot file2
若 file1 比 file2 舊則為真
file1 -ef file2
若 file1 和 file2 有相同的設備和 inode 編號則為真
-o optname
若 shell 的選項名稱 optname 已設定打開則為真
-z string
若字串長度為 0 則為真
-n string
若字串長度不是 0 則為真
string1 == string2
string1 = string2
若字串 string1 和 string2 相同則為真
string1 != string2
若字串 string1 和 string2 不相同則為真
string1 < string2
若字串 string1 排序比 string2 小則為真
注意! 字串小於比較的正確寫法為 [ "$str1" \< "$str2" ]
因為 < 對 Bash 而言是輸入轉向之意,所以要放一個跳脫字元 \ 使其特殊意義消失 !
string1 > string2
若字串 string1 排序比 string2 大則為真
注意! 字串大於比較的正確寫法為 [ "$str1" \> "$str2" ]
因為 > 對 Bash 而言是輸出轉向之意,所以要放一個跳脫字元 \ 使其特殊意義消失 !
arg1 -eq arg2
若整數 arg1 等於 arg2 則為真
arg1 -ne arg2
若整數 arg1 不等於 arg2 則為真
arg1 -lt arg2
若整數 arg1 小於 arg2 則為真
arg1 -le arg2
若整數 arg1 小於或等於 arg2 則為真
arg1 -gt arg2
若整數 arg1 大於 arg2 則為真
arg1 -ge arg2
若整數 arg1 大於或等於 arg2 則為真
若 要用 < > <= >= 來比較數字,則判斷式需擺在 (( )) 中,如:
(( "982" > "24" ))
|
藉由邏輯運算,可結合好幾個真假值判斷: [ -r filename1 -a -x filename ] 若 filename1 可讀且可執行則為真,-a 即 '且'之意。 [ -r filename1 -o -x filename ] 若 filename1 可讀 或 可執行 則為真,-o 即 '或'之意。 [ ! -r filename1 ] 若 filename1 不是可讀 則為真,! 即 '非'之意。 |
常用的判斷技巧:
if [ "$var" = "" ]; then
echo "$var 是空字串"
fi
以下效果相同:
if [ ! "$var" ]; then
echo "$var 是空字串"
fi
if [ -z "$var" ]; then
echo "$var 是空字串"
fi
if [ "X${var}" = "X" ]; then
echo "$var 是空字串"
fi
|
| <<< Previous | Home | Next >>> |
| 12.程式條件控制 if 語法結構 | 14.case 語法結構 |