每天进步一点点
全部博文(137)
分类:
2005-10-12 08:50:11
真假值的判斷有三大類:檔案測試、字串比較以及整數比較,以下列示之:
-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" ))
|
藉由邏輯咚悖?山Y合好幾個真假值判斷: [ -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
|