Shell 數值、字符串比較
Shell腳本中,數值與字符串比較是不同的,因此要註意(註意[]括號內參數和括號之間有一個空格)。
一、數值比較
-eq 等於,如: if [ $a -eq $b ]
-ne 不等於,如: if [ $a -ne $b ]
-gt 大於,如: if [ $a -gt $b ]
-ge 大於等於,如: if [ $a -ge $b ]
-lt 小於,如: if [ $a -lt $b ]
-le 小於等於,如: if [ $a -le $b ]
< 小於(需要雙括號),如: (($a < $b))
<= 小於等於(需要雙括號),如: (($a <= $b))
> 大於(需要雙括號),如: (($a > $b))
>= 大於等於(需要雙括號),如: (($a >= $b))
二、字符串比較
= 等於,如:if [ $a = $b ]
== 等於,如:if [ $a == $b ],與=等價
註意:==的功能在[[]]和[]中的行為是不同的,如下:
[[ $a == z* ]] # 如果$a以"z"開頭(模式匹配)那麽將為true
[[ $a == "z*" ]] # 如果$a等於z*(字符匹配),那麽結果為true
[ $a == z* ] # File globbing 和word splitting將會發生
[ "$a" == "z*" ] # 如果$a等於z*(字符匹配),那麽結果為true
一點解釋,關於File globbing是一種關於文件的速記法,比如"*.c"就是,再如~也是. 但是file globbing並不是嚴格的正則表達式,雖然絕大多數情況下結構比較像.
!= 不等於,如:if [ $a != $b ]
這個操作符將在[[]]結構中使用模式匹配.
< 小於,在ASCII字母順序下.如:
if [[ $a < $b ]]
if [ $a \< $b ]
註意:在[]結構中"<"需要被轉義.
> 大於,在ASCII字母順序下.如:
if [[ $a > $b ]]
if [ $a \> $b ]
註意:在[]結構中">"需要被轉義.
具體參考Example 26-11來查看這個操作符應用的例子.
-z 字符串為"null".就是長度為0.
-n 字符串不為"null"
註意:
使用-n在[]結構中測試必須要用""把變量引起來.使用一個未被""的字符串來使用! -z 或者就是未用""引用的字符串本身,放到[]結構中。雖然一般情況下可 以工作,但這是不安全的.習慣於使用""來測試字符串是一種好習慣。
Shell 數值、字符串比較