1. 程式人生 > >Shell 數值、字符串比較

Shell 數值、字符串比較

比較 文件的 操作 操作符 sci span 應用 並不是 正則表達式

  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 數值、字符串比較