1.整数比较

-eq 等于,如:if [ "$a" -eq "$b" ] 
-ne 不等于,如:if [ "$a" -ne "$b" ] 
-gt 大于,如:if [ "$a" -gt "$b" ] 
-ge 大于等于,如:if [ "$a" -ge "$b" ] 
-lt 小于,如:if [ "$a" -lt "$b" ] 
-le 小于等于,如:if [ "$a" -le "$b" ] 
<   小于(需要双括号),如:(("$a" < "$b")) 
<=  小于等于(需要双括号),如:(("$a" <= "$b")) 
>   大于(需要双括号),如:(("$a" > "$b")) 
>=  大于等于(需要双括号),如:(("$a" >= "$b")) 

备注

通过sh运行脚本,[ ]运算是可以的,而(())运行出错。直接./ 运行,都可以

2.字符串比较

= 等于,如:if [ "$a" = "$b" ] 
== 等于,如:if [ "$a" == "$b" ],与 = 等价 

比较两个字符串是否相等的办法是:

if [ "$test"x = "test"x ]; then

这里的关键有几点:

  • 1 使用单个等号
  • 2 注意到等号两边各有一个空格:这是unix shell的要求
  • 3 注意到"​$test"x最后的x,这是特意安排的,因为当​ $test 为空的时候,上面的表达式就变成了 x = testx,显然是不相等的。而如果没有这个 x,表达式就会报错:[: =: unary operator expected

常用参数

字符串可以直接使用二元比较符号。数字要使用转译符号。

参数 含义
-e 文件存在
-f 被测文件是一个regular文件(正常文件,非目录或设备)
-s 文件长度不为0
-d 被测对象是目录
-z 字符串为null,即长度为0
-n 字符串不为null,即长度不为0

例子

  1. 比较字符串,声明变量不能有空格,引用变量使用字符串括起来(可选)

    #!/bin/bash
    aa="gg"
    bb="gg"
    
    echo "Hello World !"
    if [ "$aa"x = "$bb"x ] 
    then echo "gg" 
    fi
    
  2. 比较数字,引用数字不用引号括起来。同时操作符合使用转义符。使用二元比较操作符要(())

    #!/bin/bash
    aa=1
    bb=2
    
    echo "Hello World !"
    if [ $aa -lt $bb ]
    then echo "gg" 
    fi
    
上次更新时间: 2024/5/7 05:59:02