# 11.Shell中数值比较和字符串比较

# 适用于数值的比较

参数 说明 示例
-eq 等于则为真 if [ $var1 -eq 100 ]
-ne 不等于则为真 if [ $var1 -ne 100 ]
-gt 大于则为真 if [ $var1 -gt 100 ]
-ge 大于等于则为真 if [ $var1 -ge 100 ]
-lt 小于则为真 if [ $var1 -lt 100 ]
-le 小于等于则为真 if [ $var1 -le 100 ]

# 适用于字符串的比较

参数 说明 示例
== 相等则为真 if [ $var1 == $var2 ]
!= 不相等则为真 if [ $var1 != $var2 ]
=~ 前边变量包含后边变量则为真。本质上=~是正则匹配单层中括号不支持正则需要双层中括号 if [ $var1 =~ $var2 ]

# 字符串测试运算

参数 说明 示例
-z 字符串 字符串的长度为零则为真 if [ -z $var1 ]
-n 字符串 字符串的长度不为零则为真 if [ -n $var1 ]

# 备注

  1. if语句中,数值比较的写法是if [ $var1 -ge $var2 ];字符串比较的写法是if [ “$var1” != “$var2” ],其中加双引号只是兼容$var2处为空的情况
  2. 在各种运算中,test命令的运算和中括号是等效的
  3. 赋值时等号两边没空格,比较或测试时运算符两边都要有空格
  4. shell默认是字符运算,如果想当数值进行运算要在前边加上expr,如:var3=expr $var1 + $var2
  5. 出现“[: !=: unary operator expected”或者“期待一元表达式”等类似的错误,一般都是变量的值中有空格所致,此时可将变量用双引号引起来。如if [ "$var1" == "" ]。
Last Updated: 6/20/2023, 9:16:27 AM
Apache License 2.0 | Copyright © 2022 by xueliang.wu 苏ICP备15016087号