比较运算符分类:
- = 符号,仅用于字符串比较,与==等价
- 字符型表示:大于:-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比较运算符总结