介紹
本篇文章主要是列舉在shell指令中常出現的一些用來做比較的運算符,這些運算符是編寫shell腳本的基礎;
if else基本文法
1、基本文法:
if [ command ]; then
符合該條件執行的語句
fi
2、擴充文法:
if [ command ];then
符合該條件執行的語句
elif [ command ];then
符合該條件執行的語句
else
符合該條件執行的語句
fi
數值運算符
注意:數值運算符隻是針對數值的比較,如果用來比較的是字元或者字元串則會傳回報錯“ integer expression expected”
-eq 等于則為真,如果是對整數進行比較相當于“=”
-ne 不等于則為真,如果是對整數進行比較相當于“!=”
-gt 大于則為真,如果是對整數進行比較相當于“>”
-ge 大于等于則為真,如果是對整數進行比較相當于“>=”
-lt 小于則為真,如果是對整數進行比較相當于“
-le 小于等于則為真,如果是對整數進行比較相當于“<=”
字元串比較符
=:字元串包含的文本是否一樣
== 兩個字元串是否相等
>:比較字母的大小,比如var1 > var2,如果var1字母大于var2則傳回真
<:>
!= 兩個字元串不相等
-z 空字元串
-n 非空字元串
注意:字元串的比較有時候有可能需要用雙中括号“[[ ]]”,比如調用了指令進行比較,如果這個時候還是使用單中括号會報錯,如下:
#!/bin/bash
var1="a";
var2="a"
if [[ `cat $var1` = `cat $var2` ]]
then
echo "eq"
else
echo "neq"
fi
cat指令應用的必須是個檔案,不能直接引号内容。
檔案運算符
檔案/目錄判斷:
[ -a FILE ] :如果 FILE 存在則為真。
[ -b FILE ] :如果 FILE 存在且是一個塊特殊檔案則為真。
[ -c FILE ] :如果 FILE 存在且是一個字特殊檔案則為真。
[ -d FILE ] :如果 FILE 存在且是一個目錄則為真。
[ -e FILE ] :如果 FILE 存在則為真。
[ -f FILE ] :如果 FILE 存在且是一個普通檔案則為真。
[ -g FILE ] :如果 FILE 存在且已經設定了SGID則為真。
[ -h FILE ] :如果 FILE 存在且是一個符号連接配接則為真。
[ -k FILE ] :如果 FILE 存在且已經設定了粘制位則為真。
[ -p FILE ] :如果 FILE 存在且是一個名字管道(F如果O)則為真。
[ -r FILE ] :如果 FILE 存在且是可讀的則為真。
[ -o OPTIONNAME ] :如果 shell選項 “OPTIONNAME” 開啟則為真。
[ -s FILE ] :如果 FILE 存在且大小不為o則為真。
[ -t FD ] :如果檔案描述符 FD 打開且指向一個終端則為真。
[ -u FILE ] :如果 FILE 存在且設定了SUID (set user ID)則為真。
[ -w FILE ] :如果 FILE 如果 FILE 存在且是可寫的則為真。
[ -x FILE ] :如果 FILE 存在且是可執行的則為真。
[ -z STRING ]: “STRING” 的長度為零則為真。
[ -O FILE ]:如果 FILE 存在且屬有效使用者ID則為真。
[ -G FILE ]:如果 FILE 存在且屬有效使用者組則為真。
[ -L FILE ] :如果 FILE 存在且是一個符号連接配接則為真。
[ -n string ]:判斷内容是否為空
[ -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 ] 如果字元串不為空則傳回為真,與-n類似
[ STRING1 == STRING2 ] 如果兩個字元串相同則傳回為真
[ STRING1 != STRING2 ] 如果字元串不相同則傳回為真
[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面則傳回為真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”後面則傳回為真。
數值判斷
[ INT1 -eq INT2 ] INT1和INT2兩數相等傳回為真 ,=
[ INT1 -ne INT2 ] INT1和INT2兩數不等傳回為真 ,<>
[ INT1 -gt INT2 ] INT1大于INT2傳回為真 ,>
[ INT1 -ge INT2 ] INT1大于等于INT2傳回為真,>=
[ INT1 -lt INT2 ] INT1小于INT2傳回為真 ,<
[ INT1 -le INT2 ] INT1小于等于INT2傳回為真,<=
邏輯判斷
[ ! EXPR ] 邏輯非,如果 EXPR 是false則傳回為真。
[ EXPR1 -a EXPR2 ] 邏輯與,如果 EXPR1 and EXPR2 全真則傳回為真。
[ EXPR1 -o EXPR2 ] 邏輯或,如果 EXPR1 或者 EXPR2 為真則傳回為真。
[ ] || [ ] 用OR來合并兩個條件
[ ] && [ ] 用AND來合并兩個條件
其他判斷
[ -t FD ] 如果檔案描述符 FD (預設值為1)打開且指向一個終端則傳回為真
[ -o optionname ] 如果shell選項optionname開啟則傳回為真
IF進階特性:
雙圓括号(( )):表示數學表達式
在判斷指令中隻允許在比較中進行簡單的算術操作,而雙圓括号提供更多的數學符号,而且在雙圓括号裡面的'>','
雙方括号[[ ]]:表示進階字元串處理函數
雙方括号中判斷指令使用标準的字元串比較,還可以使用比對模式,進而定義與字元串相比對的正規表達式。
可以用test指令檢查某個條件是否成立,它可以進行數值、字元串和檔案3個方面的測試,如果使用了test那麼就不要使用[]将指令括起來,否則會傳回報告如“too many arguments” 。
#!/bin/bash
var1="a"
var2="b"
var3="/data/test"
if test $var1 == $var2
then
echo "$var1=$var2"
else
echo "$var1!=$var2"
fi
echo "$var1,$var2"
if test -x "$var3"
then
echo "可執行檔案"
fi
邏輯判斷符
-a:與操作,可以用&&代替
-0:或操作,可以用||代替
!:非操作
算術運算符
+
-
*
/
%
+=:例如var+=1等同于var=var+1
-=
*=
/=
位操作符
注意:所有的這些運算符前後都要有空格否則就不是比較而是指派操作。
總結
備注:
本站點所有随筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明連結。
《歡迎交流讨論》