bash命令中,对于直接的算术操作的支持比较欠缺,但是有多个命令可以实现算术操作。对于基本的算术操作,可以使用let、(( ))、[ ]、expr执行,只支持基本整数操作;当需要进行高级操作,比如浮点数,进制转换时,可以使用bc这个工具。
1.基本整数运算
1.let
使用普通的赋值方法定义数值时,由于默认的都为字符串,因此可以使用let命令进行算术运算。使用let命令时,变量名前不需要加$符号。而且,支持自增,自减,运算赋值。
user@ubuntu:~$n1=1;n2=2; let n3=$n1+$n2; echo $n3
3
user@ubuntu:~$let n3++; echo $n3
4
user@ubuntu:~$let n3--; echo $n3
3
user@ubuntu:~$let n3+=$2; echo $n3
5
user@ubuntu:~$let n3=$n1*$n2; echo $n3
2
user@ubuntu:~$let n3=3**3; echo $n3
27
2.操作符[ ]和(( ))
这两个操作符与let命令类似,只需要使用$将操作符的结果取回,类似于bash中的子命令结果返回。
user@ubuntu:~$n1=1;n2=2; res=$[n1 + n2]; echo $res
3
user@ubuntu:~$res=$((n2 ** n2)); echo $res
4
3.expr
expr同样只能用于整数运算,不支持浮点数。与上述命令类似。
user@ubuntu:~$res=`expr 12 + 2`; echo $res
14
user@ubuntu:~$n1=1; res=$(expr $n1 + 3); echo $res
4
user@ubuntu:~$expr index "abcde" 'b'
2
user@ubuntu:~$res=`expr 12+2`; echo $res
12+2
使用expr时必须要在运算符两边加上空格,否则会当做字符串。支持的运算如上图中列举。
2.高级工具bc
bc是一个用于数学运算的高级工具,包含了大量的选项,可以进行精密的计算。如设置浮点数精度、进制转换、计算平方根等。
使用bc工具可以直接输入bc命令,然后就出现了一个供输入表达式的提示,按回车之后就可以得出结果。基本运算符有:+,-,*,/,^(指数)、%(取模)。使用scale可以设定输出小数精度,默认为0。
user@ubuntu:~$bc
bc 1.06.95
Copyright ......
1+2+3
6
4^2
16
15%4
3
1/3
0
scale=3
1/3
.333
如果要离开bc计算环境,输入quit即可。当然bc也可以接受字符串来进行计算。可以设定小数进度、进制转换。
user@ubuntu:~$echo "4 * 0.6" | bc
2.4
user@ubuntu:~$echo "scale=3; 4/7" | bc
.571
user@ubuntu:~$echo "obase=2;100" | bc
1100100
user@ubuntu:~$echo "obase=10;ibase=2;100" | bc
4
user@ubuntu:~$echo "sqrt(100)" | bc
10
在shell脚本的编写中,总是会需要用到各种数学运算的,这些功能算是给数学运算欠缺的shell提供了一定的支持。