1. 程式人生 > 實用技巧 >Shell if 條件判斷

Shell if 條件判斷

條件測試表達式:中括號必須加空格。

[ expression ]  括號兩端必須要有空格
[[ expression ]] 括號兩端必須要有空格
test expression

組合測試條件
    -a:and
    -o:or
    !:取非
View Code

單分支if語句:

if [ 判斷條件 ];then
statement1
...
fi
View Code

雙分支if語句:

if [ 判斷條件 ];then
statement1
...
else
statement1
...
fi
View Code

多分支if語句:

if [ 判斷條件 ];then
statement1
...
elif [ 判斷條件 ];then statement1 ... else statement1 ... fi exit:退出指令碼
View Code

檔案/資料夾(目錄)判斷

-z string 測試指定字元是否為空,空著真,非空為假
-n string 測試指定字串是否為不空,空為假 非空為真
-e FILE 測試檔案是否存在
-f file 測試檔案是否為普通檔案
-d file 測試指定路徑是否為目錄
-r file 測試檔案對當前使用者是否可讀
-w file 測試檔案對當前使用者是否可寫
-x file 測試檔案對當前使用者是都可執行
-z 是否為空 為空則為真
-a 是否不空

[ 
-b FILE ] 如果 FILE 存在且是一個塊特殊檔案則為真。 [ -c FILE ] 如果 FILE 存在且是一個字特殊檔案則為真。 [ -d DIR ] 如果 FILE 存在且是一個目錄則為真。 [ -e FILE ] 如果 FILE 存在則為真。 [ -f FILE ] 如果 FILE 存在且是一個普通檔案則為真。 [ -g FILE ] 如果 FILE 存在且已經設定了SGID則為真。 [ -k FILE ] 如果 FILE 存在且已經設定了粘制位則為真。 [ -p FILE ] 如果 FILE 存在且是一個名字管道(F如果O)則為真。 [ -r FILE ] 如果 FILE 存在且是可讀的則為真。 [
-s FILE ] 如果 FILE 存在且大小不為0則為真。 [ -t FD ] 如果檔案描述符 FD 開啟且指向一個終端則為真。 [ -u FILE ] 如果 FILE 存在且設定了SUID (set user ID)則為真。 [ -w FILE ] 如果 FILE存在且是可寫的則為真。 [ -x FILE ] 如果 FILE 存在且是可執行的則為真。 [ -O FILE ] 如果 FILE 存在且屬有效使用者ID則為真。 [ -G FILE ] 如果 FILE 存在且屬有效使用者組則為真。 [ -L FILE ] 如果 FILE 存在且是一個符號連線則為真。 [ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read則為真。 [ -S FILE ] 如果 FILE 存在且是一個套接字則為真。 [ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not則為真。 [ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在則為真。 [ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的裝置和節點號則為真。
View Code

字串判斷

[ -z STRING ] 如果STRING的長度為零則為真 ,即判斷是否為空,空即是真;
[ -n STRING ] 如果STRING的長度非零則為真 ,即判斷是否為非空,非空即是真;
[ STRING1 = STRING2 ] 如果兩個字串相同則為真 ;
[ STRING1 != STRING2 ] 如果字串不相同則為真 ;
[ STRING1 ]  如果字串不為空則為真,與-n類似
-s:測試指定字串是否不空,不空為真,空為假
    -s string
==:測試是否相等,相等為真,不等為假
!=:測試是否不等,不等為真,相等為假
>:字串大於為真,小於為假
<:字串小於為真,大於為假
>=
<=
View Code

整數比較:

-eq:測試兩個整數是否相等:比如 [ $a -eq $b ]
-ne:測試兩個整數是否不等:不等,為真:相等,為假:
-gt:測試一個數是否大於另一個數:大於,為真:小於,為假:
-lt:測試一個數是否小於另一個數:小於,為真:大於,為假:
-ge:大於或等於
-le:小於或等於
View Code

條件測試的寫法:

1、執行一個命令的結果
if grep -q "rm" fs.sh;then

2、傳回一個命令執行結果的相反值
if !grep -q "rm" fs.sh;then

3、使用複合命令((算式))
if ((a>b));then

4、使用bash關鍵字 [[判斷式]]
if [[ str > xyz ]];then

5、使用內建命令:test 判斷式
if test "str" \> "xyz";then

6、使用內建命令:[判斷式] 類似test
if [ "str" \> "xyz" ];then

7、使用-a -o進行邏輯組合
[ -r filename -a -x filename ]

8、命令&&命令
if grep -q "rm" fn.sh && [ $a -lt 100 ];then

9、命令||命令
if grep -q "rm" fn.sh || [ $a -lt 100 ];then
View Code