最全面的Shell比较运算符总结

比较运算符分类:

  • = 符号,仅用于字符串比较,与==等价
  • 字符型表示:大于:-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=2
b=1
[[ "$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" ]]    #错误

参考链接

最全面的Shell比较运算符总结

上一篇:LInux回顾与Shell编程


下一篇:oracle构建一致性读