小技巧:
if condition; then commands; fi
if condition; then commands;elif condition;then commands;else commands fi
嵌套過多會影響閱讀,可以使用邏輯運算符變簡單直接:
[ condition ] && commands;
[ condition ] || commands;
注:條件一般放在封閉的括號中,且在 “[” 和 “]"後和前必須有空格,不然會報錯。
算術比較:
[ $var -eq 0 ] 等於0 返回真
[ $var -ne 0 ] 不等於0返回真
-gt 大於 -lt 小於 -ge大於等於 -le 小於等於
多條件組合:
[ $var1 -ne 0 -a $var2 lt $var1 ] -a表示邏輯與
[ $var1 -ne 0 -o $var2 lt $var1 ] -o表示邏輯或
字符串比較:
注:字符串比較最好採用雙中括號,不然可能報錯;
”=“ 前後各有一個空格,如果不加則變成了賦值關係!!!
[[ $str1 = $str2 ]] 兩字符串相等時返回真,即二者文本相同
[[ $str1 == $str2 ]] 作用同上
!= 不同返回真 ’>'和'<'不贅述
[[ -z $str1 ]] 如果字符串是空串,返回真
[[ -n $str1 ]] 如果字符串不是空串,返回真
文件比較:
[ -f $file ] 文件路徑或者文件名則返回真
[ -x $file ] 文件可執行則返回真
[ -d $file ] 目錄爲真返回真
[ -e $file ] 文件存在返回真
[ -c $file ]文件是字符設備文件的路徑返回真
[ -b $file ]文件是塊設備文件的路徑返回真
[ -w $file ]文件可寫返回真
[ -r $file ]文件可讀返回真
[ -L $file ]文件是符號鏈接返回真
例:
#!/bin/bashfile="/etc/passwd"
if [ -e $file ];
then echo File Exists;
else
echo $file not exists
fi
初學的同胞們可以自己寫一下, 會發現各種問題,比如賦值寫成相等。。
最後一種: test
test 的使用可以減少中括號數量
直接上代碼:
if [ $var -eq 0 ] ;
then echo true;
fi
可以被替換爲:
if test $var -eq 0 ; 。。。
路途遙遠,要有耐心