大家都知道,windows下有个计算器工具,我们在工作生活中经常使用到它。但是,你可知Linux下也同样有个计算器吗? 当然,良许说的是命令行下的计算器工具,而不是界面型的计算器。良许是Linux应用开发工程师,平时基本是在命令行下工作,所以对于界面类的操作良许也不是非常擅长。 **启动计算器** 启动这个命令行计算器很简单,只需在终端下输入bc即可。bc是英语basic calculator的缩写。退出计算器也很简单,只需输入quit即可。 ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSp1csFc4NRd34b0rWObofYcCSXepwiaibs1TsZmK8IWBsTKb8NzaCMGpw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) **选项** 当然,这个计算器也是可以带选项的,常用的选项如下: -i:强制进入交互式模式; -l:定义使用的标准数学库; -w:对POSIX bc的扩展给出警告信息; -q:不打印正常的GNU bc环境信息; -v:显示指令版本信息; -h:显示指令的帮助信息。 **基本运算** 启动计算器之后,就可以在里面进行计算了。基本的运算如下: \+ 加法 \- 减法 * 乘法 / 除法 ^ 指数 % 余数 ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvStfiaqgiaRY9ib26nWgxr1bnqktLsj9DSfxukSWibIZwOz4Cv3YqiargbQbw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 当然,如果只支持这些运算的话,那也太小儿科了,它的强大之处还在后头。 **表达式运算** 如果要计算一个表达示,直接在bc里输入表达式即可。bc会将变量存储,其它表达式也可以直接使用这个变量。 ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSvic4GSdcZQnG0e21prXqMkeyDSia7H7uricSPgfoIBfybOSjfxolTo0Vg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) **进制切换** 作为一个程序员,我们经常与二进制,十进制,十六进制进行打交道,bc当然也支持这些操作。输入和输出的数系基分别存储在ibase和obase变量中,默认值为10,有效的数值是2到16。也就是说,我们除了常规的2、8、10、16进制,还可以使用3、5、7、9等进制。 但是,在进行设置的时候,一定要先设置obase,再设置ibase。因为如果先设置ibase的话,再设置obase时,obase等号后面的数字就会被认为是ibase设置的进制值。 ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSCULsibYwIqss6pBqlhibhib94MxL7FcJGEdM0W52NWX2UDvOO9icrOb4dQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) **精度调整** bc默认的精度是0,也就是说,bc是默认以整数的方式进行存储。我们可以通过设置scale这个变量来进行调整精度。 ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSfIZ02M13u5NQZmmegmLicCgibsZx9mibmmQe8joqGtPk4BAwS4hjySt6A/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) **使用内置函数** 除了简单的算术操作符,bc还通过外部的数学函数库来提供许多高级的数学函数。此时,应该使用-l选项。常用的函数如下: N的二次方根 sqrt(N) X的正弦(X是弧度) s(X) X的余弦(X是弧度) c(X) X的反正弦(返回值是弧度) a(X) X的自然对数: l(X) X的指数对数: e(X) ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSNPMBa4Z4QYcUfPT8ymxiaKuasia2DTicOiaoVnAh4cibEia7XP89riby5TLZA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) **编程运算** 作为一个计算语言,bc支持简单的声明(变量赋值、中断、返回等)、复合语句(if、while、for loop等)和自定义函数。这个功能就比较高级,更详细的内容可以参考官方指南。 ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSibLeNfbt2icxt2kz27VbnpoiarIfDAm5UicDZwxYiashNhkdZhE852a87PA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) **通过管道操作** 直接上例子: ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvStkvrqoEuyQeib8maHnLFxDH22lDiaquQyKzictLgf76khNjt2IiaHb42Eg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 也能够使用HERE 命令: ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvS4f1PVFcFiaSaK2aWlWD07IxIZkRBqviaUHNHDuGQIYxLuhGZrQia0f5Xw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 能够使用内置的变量 last 引用上一次的结果: ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSr4cxWuGqEP1sNfXVHRvbiclG39yeOrZlffSHf0xM7PE2bOznqs4GGfw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) last 也能够用 点号取代: ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSCYHLdobL6icNqMr90mc9NtzQiaYvRmHk68xL2p057YuCuvMfJUpbCUCw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) **非交互界面下使用bc** 到目前为止,我们一直在交互界面下使用bc。不过更加流行的使用bc的方法是在没有交互界面的脚本中运行bc。这种情况下,你可以使用echo命令并且借助管道来向bc发送输入内容。 ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSwXGXXTRGHb78vH43ccJAj7VeialRgM9JHYLRxjWzEVr0zZkP2tkDia5Q/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 运行结果: ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSibb24HWLfZQ3WqZ0SCp7znTw2My031mPMvmcopibt9hBuyIh4mpTeYUA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) **一个简单的计算三角形面积的程序** ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSM9qVbnbBtHs9lRHjstdaNeNnLhRbHNJUqedQsgbQMxjqtIXI22ozOg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 进行结果: ![img](https://mmbiz.qpic.cn/mmbiz_png/YeUmRxGrEBb4oOmnZEU8H30mMTtBicCvSIHsOF1qcyiaSuzXuBzibHrFjzsMQCyvCroumCQK3PVY5qxcyYldSUzFA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) **结语** bc这个命令行计算器非常强大,至少比window自带的计算器要强大很多。这个工具特别适合linux开发人员,在无需打开手机计算器的情况下,很方便的就可以进行数学运算。同时,也可以编写脚本进行更复杂的数学运算。更强大的功能还有待你的发现! 更多精彩内容,请关注公众号**良许Linux**,公众内回复**1024**可免费获得5T技术资料,包括:**Linux,C/C++,Python,树莓派,嵌入式,Java,人工智能**,等等。公众号内回复**进群**,邀请您进高手如云技术交流群。 ![img](http://pbe9kvqil.bkt.clouddn.com/FmsDX2j5rcQ7DjY8p-KYTN7m5uNu)