Shell 数值字符串比较

Posted stackOverFlow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 数值字符串比较的主要内容,如果未能解决你的问题,请参考以下文章

Shell 数值字符串比较

Shell中字符串数值的比较

Shell中字符串数值的比较

bash shell数值比较(-eq)与字符比较(==)的区别

Shell脚本 文本测试整数值比较字符串比较 条件测试操作 if语句应用实例

shell字符串和数值作比较运算需要注意的地方