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 |
例子
比较字符串,声明变量不能有空格,引用变量使用字符串括起来(可选)
#!/bin/bash aa="gg" bb="gg" echo "Hello World !" if [ "$aa"x = "$bb"x ] then echo "gg" fi
比较数字,引用数字不用引号括起来。同时操作符合使用转义符。使用二元比较操作符要
(())
#!/bin/bash aa=1 bb=2 echo "Hello World !" if [ $aa -lt $bb ] then echo "gg" fi