添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

网上搜索比较运算符,会得到很多的博文,但是感觉都只讲到了其中的一部分,而且经常有错误。
在使用的时候,也容易踩坑,如缺少空格报错,或者结果应该是“false”的表达式,结果却显示为“true”等等,时常让人摸不着头脑。通过官方文档,以及自己的探索,总结了各种运算符的使用条件,和容易出错的地方(有些内在的道理还不是很清楚),希望能给大家避点雷。

比较运算符分类:

  • = 符号,仅用于字符串比较,与==等价
  • 字符表示:大于:-gt, 小于:-lt, 大于等于:-ge, 小于等于: -le, 不等于:-ne, 等于:-eq
  • 符号表示:大于:> , 小于:< , 大于等于:>= , 小于等于: <= , 不等于:!= , 等于:==
  • 字符串正则匹配:=~
  • 常用形式:

  • 用于单中括号[ ]中, 变量需要使用使用'$'符号,含 > 和 < 的符号时,需要使用'\'进行转义
  • if [ $a \> $b ]   
    
  • 用于双中括号[[ ]]中,变量需要使用使用'$'符号,比较运算符符号不需要转义(推荐使用)
  • if [[ $a > $b]]   
    
  • 用于双小括号(( ))中,变量可以不使用'$'符号,不需要使用转义,在代数比较时,只能用于整数比较(与C语言for循环中的判断条件语法相同)
  • if ((a > b))   
    

    字符串的比较

  • 一般使用,!= 、==(或 =)、=~ ,分别表示:不等于、等于 和 正则匹配(成功匹配返回 1)
  • 偶尔使用:> 和 < , 其含义是比较字符的ascii编码大小
  • 使用test进行字符串比较,仅能使用 == 和 != 符号, == 可以简化为 =
  • 字符串正则匹配:=~, 一般放在[[]]中,可避免转义,注意:左右两边必须有空格,且右边不要使用引号,否则会匹配失败
  • -gt, -lt,-ge,-le, -eq, -ne, 仅适用于\(\color{blue}{整数}\),且比较运算符左右两边必须有空格,否则会被整体视为一个字符串(非空字符串,恒为正)
  • [[ "$a"-gt"$b" ]] #返回 1, 因为当成一个整体字符串,非空 [[ "$a"-lt"$b" ]] #返回 1, 因为当成一个整体字符串,非空 [[ "$a" -gt "$b" ]] #返回 1,因为 2 > 1 [[ "$a" -lt "$b" ]] #返回 0,因为 2 > 1 [[ "$a" -lt"$b" ]] #报错,缺少比较运算符,因为 把$a 和 -lt$b当成了2个字符串 [[ "$a"-lt "$b" ]] #报错,同上 a=2.2 b=1.1 [[ "$a"-gt"$b" ]] #返回 1, 因为当成一个整体字符串,非空 [[ "$a"-lt"$b" ]] #返回 1, 因为当成一个整体字符串,非空 [[ "$a" -gt "$b" ]] #报错[[: 2.2: syntax error: invalid arithmetic operator (error token is ".2"),因为识别不了2.2为整数 [[ "$a" -lt "$b" ]] #报错, 同上
  • 使用 > ,< ,>= , <= , != ,== 时,运算符左右两边可以使用空格,也可以不使用空格
  • 浮点数比较

  • 仅能使用使用 > ,< ,>= , <= , != ,== ,运算符左右两边不可以使用空格,不可使用字符型的比较运算符
  • [ "$a"\>="$b" ]       #正确
    [ "$a" \>= "$b" ]     #错误
    [[ "$a">="$b" ]]      #正确
    [[ "$a" >= "$b" ]]    #错误
    
  • GNU:Conditional-Constructs
  • GNU:Bash-Conditional-Expression
  • if else以及大于、小于、等于逻辑表达式
  • shell script 在if 的判断条件正则表达式=~中引号问题
  • 后记:博文发表出来,没几个小时就被“码农教程”给盗取了,里面保留了我原滋原味的错误,而且那里应该也不会更新,希望不会害到一些人。

    -----------------------------------------------------------

    本文来自博客园,作者:小厨房,转载请注明原文链接:https://www.cnblogs.com/erichf/p/13458200.html,否则视为侵权

    如有疑问,请站内留言 或加 QQ:②⑨⓪②② ⑦③⑦⑨

    -----------------------------------------------------------