Shell if 條件判斷
阿新 • • 發佈:2020-08-11
條件測試表達式:中括號必須加空格。
[ expression ] 括號兩端必須要有空格 [[ expression ]] 括號兩端必須要有空格 test expression 組合測試條件 -a:and -o:or !:取非View Code
單分支if語句:
if [ 判斷條件 ];then statement1 ... fiView Code
雙分支if語句:
if [ 判斷條件 ];then statement1 ... else statement1 ... fiView Code
多分支if語句:
if [ 判斷條件 ];then statement1 ...View Codeelif [ 判斷條件 ];then statement1 ... else statement1 ... fi exit:退出指令碼
檔案/資料夾(目錄)判斷
-z string 測試指定字元是否為空,空著真,非空為假 -n string 測試指定字串是否為不空,空為假 非空為真 -e FILE 測試檔案是否存在 -f file 測試檔案是否為普通檔案 -d file 測試指定路徑是否為目錄 -r file 測試檔案對當前使用者是否可讀 -w file 測試檔案對當前使用者是否可寫 -x file 測試檔案對當前使用者是都可執行 -z 是否為空 為空則為真 -a 是否不空 [View Code-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 指向相同的裝置和節點號則為真。
字串判斷
[ -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 ];thenView Code