跳到主要内容

运算与测试

bash中原生支持整数的算术运算,浮点数的计算需要通过外部命令才能完成,另外也能进行关系运算、逻辑运算等。

运算

算术运算支持加减乘除等,下面看示例:

算术运算

# 加
echo $((1+2))
# 减
echo $((1-2))
# 乘
echo $((1*2))
# 除
echo $((1/2))
# 幂
echo $((2**3))
# 余数
echo $((-7%4))
# 后置自加
echo $((a++))
# 前置自减
echo $((--a))
# 三元操作
((c = a<=1 ? 0 : 100))

进制转换

# 各种进制转10进制, echo $((base#number)), 例如:
echo $((2#11))  #3
echo $((8#12)) #10
echo $((012))  #或者0开头也表示8进制
echo $((16#a)) #10
echo $((0xa)) #或者0x开头也表示16进制

逻辑运算

bash中逻辑运算符是&&||!,分别表示,逻辑运算符连接两个命令,通过对两个命令的返回值进行计算并得到逻辑结果。下面看示例,通过返回值来观察逻辑运算结果,注意返回值0表示成功,非0表示失败:

true && true ; echo $?  #输出0
true && false ; echo $? #输出1
false && false ; echo $?  #输出1
true || true ; echo $?  #输出0
true || false ; echo $?  #输出0
false || true ; echo $?  #输出0
false || false ; echo $?  #输出1
! true ; echo $?  #输出1
!false ; echo $?  #输出0

关系运算

关系运算用来比较整数的大小,关系运算写法是[[ 数字1 运算符 数字2 ]] ,下表是关系运算符:

运算符作用运算符作用运算符作用
-gt大于-lt小于-eq等于
-ge大于等于-le小于等于-ne不等于

也可以通过返回值来观察运算结果,下面看示例:

[[ 1 -gt 2 ]] ; echo $?  #输出1
[[ 1 -ge 2 ]] ; echo $?  #输出1
[[ 1 -lt 2 ]] ; echo $?  #输出0
[[ 1 -le 2 ]] ; echo $?  #输出0
[[ 1 -eq 2 ]] ; echo $?  #输出1
[[ 1 -ne 2 ]] ; echo $?  #输出0

测试

除了以上对于整数的关系运算外,还支持很多其他类型的测试,例如测试变量、文件等,测试的写法也是[[ 测试符 对象 ]]常用的测试见下表:

测试符作用
-e文件是否存在
-s文件大小是否大于0字节
-d是否目录
-b是否块文件
-f是否普通文件
-L是否软链接
-r是否可读
-w是否可写
-x是否可执行
-n字符串有值
-z字符串为空

更多的测试方法可以查阅man test来了解到。下面看示例:

var1=1
var2=''
[[ -n $var1 ]] ; echo $? #输出0
[[ -z $var1 ]] ; echo $? #输出1
[[ -z $var2 ]] ; echo $? #输出0
[[ -x /bin/bash ]] ; echo $? #输出0
[[ -b /bin/bash ]] ; echo $? #输出1