shell中要进行数学运算通常有3中方法:
expr命令
比如 expr 1 + 6就会返回7,使用expr的缺点就是碰到乘法运算,或者加括号(因为它们在shell中有其他意义),需要使用转义,比如:expr ( 2 + 3) * 5,这样就会使得表达式很难看
$[expression]命令
使用$[expression]命令也可以进行数学计算,并且比expr方便的是*和括号可以不用转义,比如仍然计算(2 + 3) * 5,可以直接写为:
result=$[ (2 + 3) * 5 ]
上面两种操作符expr命令和$[expression]都只能处理整数,而无法处理浮点数,要进行浮点数运算,就必须借助shell当中的bc命令。
bc命令
对于简单的运算,可以使用如下形式:
result=`echo "options;expression" | bc`
其中options通常都是使用bc里面的变量scale设置浮点数精度(scale默认为0),expression为算数表达式,比如计算3.6 * 7.2,可以写为:
result=`echo "scale=3;3.6 * 7.2" | bc`
这种形式对于简单的计算很方便,但是如果涉及到复杂的,可以使用下面的形式:
result=`bc << EOF
options
expression
EOF`
其中<<是内联输入重定向运算符,其后跟的是结束标志(可以是任何字符或者字符串),上面的表达式表示给bc命令提供输入,直到遇到EOF为止;options和expression同上。
比如,仍然是计算3.6 * 7.2,可以写为:
result=`bc << EOF scale = 3 var1 = 3.6 var2 = 7.2 var1 * var2 EOF`
使用bc命令需要注意两点:
1) bc命令里面可以自己定义变量,如上面的var1和var2,但是只能在bc命令里面使用,当bc命令结束时,这些变量无法访问,同时在bc里面访问这些变量无需带$符
2)bc命令里面可以访问shell中的变量