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 ] |
备注
- if语句中,数值比较的写法是if [ $var1 -ge $var2 ];字符串比较的写法是if [ “$var1” != “$var2” ],其中加双引号只是兼容$var2处为空的情况
- 在各种运算中,test命令的运算和中括号是等效的
- 赋值时等号两边没空格,比较或测试时运算符两边都要有空格
- shell默认是字符运算,如果想当数值进行运算要在前边加上expr,如:var3=
expr $var1 + $var2
- 出现“[: !=: unary operator expected”或者“期待一元表达式”等类似的错误,一般都是变量的值中有空格所致,此时可将变量用双引号引起来。如if [ "$var1" == "" ]。