数学上的加减乘除运算,在shell脚本中也能运行,shell一共提供三个方法来执行数学运算,分别是expr,方括号模式和双括号模式。
expr方法(这个方法不推荐使用,了解就行)
例如输入命令:
expr 2 - 5
输出结果为:
-3
注意,上面的减号左右都有空格,没有的话会报错的。
但是expr有一个缺点导致它并不常用,expr不会自动去转义一些特殊的符号,比如乘法符号*,输入:
expr 3 * 5
输出:
expr: 语法错误
加上反斜线,可以解决这个问题,输入:
expr 3 \\* 5
输出结果为:
15
expr用起来实在是太麻烦了。
方括号
通过美元符号加中括号,把数学表达书框起来的形式,也能够完成数学运算,并且这种方式不需要转义,使用更加方便,建议以后使用这个方式,例如输入:
#!/bin/bash
var1=3
var2=$[3 + 3]
var3=$[$var1 + $var2]
var4=$[$var3 * 2]
var5=$[2 * ($var3 - $var4)]
echo "var1=$var1,var2=$var2,var3=$var3,var4=$var4,var5=$var5"
var6=$[100 / 30]
echo "var6=$var6"
输出:
var1=3,var2=6,var3=9,var4=18,var5=-18
var6=3
可以看出,var1~var5都计算没问题,但是var6结果并不精确。这是因为shell只能支持整数运算。如果想要在shell中使用小数运算的话可以使用bc命令或者awk命令。
用方括号的方式还有一个好处,就是在加减乘除符号左右两侧留不留空格,都能正常执行。
bc命令用法如下,
输入
echo "3/4"|bc -l
输出
.75000000000000000000
有的linux版本不装bc命令,我就遇到过,使用awk命令也能计算小数的运算。
输入:
echo 5 3|awk '{print $1/$2}'
输出
1.66667
双小括号
这种方式最好用,也不用考虑多加个空格的问题,比如把上面的脚本改为:
#!/bin/bash
var1=3
var2=$((3 + 3))
var3=$(($var1 + $var2))
var4=$(($var3 * 2))
var5=$((2 * ($var3 - $var4)))
echo "var1=$var1,var2=$var2,var3=$var3,var4=$var4,var5=$var5"
var6=$((100 / 30))
echo "var6=$var6"
输出结果为:
var1=3,var2=6,var3=9,var4=18,var5=-18
var6=3