17 March 2017

最近在写Shell脚本时,需要将两个浮点数加起来,将结果赋给一个变量。直接写var=$(( 1.2 + 1.3 ))发现竟然不行。 原来Shell自身不支持浮点数的计算!

为了在Shell中进行任意的数学计算,可以采用其他工具。

第一种是利用bc,支持任意精度计算的命令行程序:

var=`echo 1.2 + 1.3 | bc`

另一种是调用其他脚本语言解释器,将计算出的结果返回给Shell:

var=`python -c "print('%.1f' % (1.2 + 1.3))"`

实际上,bc也是一种“语言”的解释器(与python实质上是一样),只不过这种语言是专门用来进行计算的。

选用自己熟悉的语言可以方便地控制输出结果的格式。

这其实给我们一种启发:在Unix/Linux系统上,用Shell脚本时不需要局限于Shell语言,系统上有的其他工具(无论是编译好的程序还是其他脚本语言解释器)都可以用来完成任务。 但这样需要考虑所写的脚本在新的系统上能否成功运行的问题。毕竟,只用Shell语言是最可移植的。