老胡的看法:
Linux的bash shell下面有很多支持整数和浮点运算的工具,比如常见的echo(只支持整数)、printf、awk、bc、dc、以及一些Linux下大家常用的编程语言框架如node、perl、python等都可以用来做一些简单的数学运算。这里偶重点介绍几个:
使用printf进行数学计算
利用printf的格式化输出特性,可以计算echo无法输出的浮点数。printf可以支持四则运算、乘方、科学计数法等计算。不过无法支持三角函数和对数计算。对于一般的情形来说其实已经够用:
%f表示以浮点数格式输出,.后面的数字表示保留的小数位数。打印的字符串里**表示乘方,e表示科学计数法。
使用bc进行数学计算
bc是BestCalculator的首字母缩写,它是一个支持交互式计算的命令行计算器,同时也支持内联模式的调用。通过scale可以设置输出的小数精度,通过obase设置输出的进制,ibase设置输入的进制,以此来实现更加强大的功能:
使用awk进行数学计算
不得不说awk简直就是字符串处理的神器,除了一般的字符串处理之外,awk也提供了强大的计算功能。awk的计算函数中还支持了sin、cos等三角函数、sqrt开方和对数函数等运算函数。通常为了使用方便,大家在bash中可以先定义一个计算器函数过程:
cal(){ awk “BEGIN { print $*}”; }
之后再使用cal+算术式就可以进行运算了:
使用dc进行数学计算
dc是一个使用逆波兰表示法输入算术式的计算器,同时支持命令行计算和交互式计算,和bc差不多,但是它使用的逆波兰表示法很有意思,也需要一些时间来适应。逆波兰表示法的核心是使用栈式运算,操作数入栈,遇到运算符时最上面的两个操作数进行计算,结果入栈。
比如:
5 + ((1 + 2) * 4) – 3
写成逆波兰表达式就是:
5 1 2 + 4 * + 3 -在bash shell中使用其它脚本语言计算
比如node、python、perl、php甚至sqlite都可以利用起来用作整数和浮点运算,以node为例,直接使用js里面的数学表达式就可以:
总结一下,老胡介绍的这几样工具是不是很好玩?想知道更加详细的玩法,多使用man命令查看文档。在老胡介绍这几样神器之前是不是以为bash shell只能进行有限的整数运算?老胡非常强烈的建议好好学一下awk这个神器,偶感觉它已经快上天入地无所不能了。另外除了bash shell之外,还可以多了解一下zsh shell,它原生的echo就可以进行浮点运算,其它的功能也非常强大,最新版的macOS选用了它作为默认的shell程序。
如果偶的回答对你有点价值,请莫忘点赞加关注,谢谢!欢迎在评论区发表各种意见。
本文为作者原创,严禁转载,违者必究。