本篇文章主要是列舉在shell命令中常出現的一些用來作比較的運算符,這些運算符是編寫shell腳本的基礎;正則表達式
一、基本語法:
if [ command ]; then
符合該條件執行的語句
fi
二、擴展語法:
if [ command ];then
符合該條件執行的語句
elif [ command ];then
符合該條件執行的語句
else
符合該條件執行的語句
fishell
注意:數值運算符只是針對數值的比較,若是用來比較的是字符或者字符串則會返回報錯「 integer expression expected」
-eq 等於則爲真,若是是對整數進行比較至關於「=」
-ne 不等於則爲真,若是是對整數進行比較至關於「!=」
-gt 大於則爲真,若是是對整數進行比較至關於「>」
-ge 大於等於則爲真,若是是對整數進行比較至關於「>=」
-lt 小於則爲真,若是是對整數進行比較至關於「<」
-le 小於等於則爲真,若是是對整數進行比較至關於「<=」express
字符串比較符bash
=:字符串包含的文本是否同樣函數
== 兩個字符串是否相等測試
>:比較字母的大小,好比var1 > var2,若是var1字母大於var2則返回真this
<:和大於相反spa
!= 兩個字符串不相等code
-z 空字符串orm
-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
-=
*=
/=
位操做符
注意:全部的這些運算符先後都要有空格不然就不是比較而是賦值操做。
備註: 做者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站點全部隨筆都是原創,歡迎你們轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連接。 《歡迎交流討論》 |