运算与测试
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