86427217 2016-08-15
分享一个命令行计算器-bc
假如你在一个图形桌面环境中需要一个计算器时,你可能只需要一路进行点击便可以找到一个计算器。例如,Fedora工作站中就已经包含了一个名为Calculator的工具。它有着几种不同的操作模式,例如,你可以进行复杂的数学运算或者金融运算。但是,你知道吗,命令行也提供了一个与之相似的名为bc的工具?下面兄弟连(www.lampbrother.net)为大家做个介绍:
bc工具可以为你提供的功能可以满足你对科学计算器、金融计算器或者是简单计算器的期望。另外,假如需要的话,它还可以从命令行中被脚本化。这使得当你需要做复杂的数学运算时,你可以在shell脚本中使用它。
因为bc也被用于其他的系统软件,例如CUPS打印服务,所以它可能已经在你的Fedora系统中被安装了。你可以使用下面这个命令来进行检查:
dnflistinstalledbc
假如因为某些原因你没有在上面命令的输出中看到它,你可以使用下面的这个命令来安装它:
sudodnfinstallbc
用bc做一些简单的数学运算
使用bc的一种方式是进入它自己的shell。在那里你可以按行进行许多次计算。当你键入bc后,首先出现的是有关这个程序的警告:
$bc
bc1.06.95
Copyright1991-1994,1997,1998,2000,2004,2006FreeSoftwareFoundation,Inc.
ThisisfreesoftwarewithABSOLUTELYNOWARRANTY.
Fordetailstype`warranty'.
现在你可以按照每行一个输入运算式或者命令了:
1+1
bc会回答上面计算式的答案是:
2
在这里你还可以执行其他的命令。你可以使用加(+)、减(-)、乘(*)、除(/)、圆括号、指数符号(^)等等。请注意bc同样也遵循所有约定俗成的运算规则,例如运算的先后顺序。你可以试试下面的例子:
(4+7)*2
4+7*2
若要退出bc可以通过按键组合Ctrl+D来发送“输入结束”信号给bc。
使用bc的另一种方式是使用echo命令来传递运算式或命令。下面这个示例就是计算器中的“Hello,world”例子,使用shell的管道函数(|)来将echo的输出传入bc中:
echo'1+1'|bc
使用shell的管道,你可以发送不止一个运算操作,你需要使用分号来分隔不同的运算。结果将在不同的行中返回。
echo'1+1;2+2'|bc
精度
在某些计算中,bc会使用精度的概念,即小数点后面的数字位数。默认的精度是0。除法操作总是使用精度的设定。所以,如果你没有设置精度,有可能会带来意想不到的答案:
echo'3/2'|bc
echo'scale=3;3/2'|bc
乘法使用一个更复杂的精度选择机制:
echo'3*2'|bc
echo'3*2.0'|bc
同时,加法和减法的相关运算则与之相似:
echo'7-4.15'|bc
其他进制系统
bc的另一个有用的功能是可以使用除了十进制以外的其他计数系统。例如,你可以轻松地做十六进制或二进制的数学运算。可以使用ibase和obase命令来分别设定输入和输出的进制系统。需要记住的是一旦你使用了ibase,之后你输入的任何数字都将被认为是在新定义的进制系统中。
要做十六进制数到十进制数的转换或运算,你可以使用类似下面的命令。请注意大于9的十六进制数必须是大写的(A-F):
echo'ibase=16;A42F'|bc
echo'ibase=16;5F72+C39B'|bc
若要使得结果是十六进制数,则需要设定obase:
echo'obase=16;ibase=16;5F72+C39B'|bc
下面是一个小技巧。假如你在shell中做这些十六进制运算,怎样才能使得输入重新为十进制数呢?答案是使用ibase命令,但你必须设定它为在当前进制中与十进制中的10等价的值。例如,假如ibase被设定为十六进制,你需要输入:
ibase=A
一旦你执行了上面的命令,所有输入的数字都将是十进制的了,接着你便可以输入obase=10来重置输出的进制系统。
结论
上面所提到的只是bc所能做到的基础。它还允许你为某些复杂的运算和程序定义函数、变量和循环结构。你可以在你的系统中将这些程序保存为文本文件以便你在需要的时候使用。你还可以在网上找到更多的资源,它们提供了更多的例子以及额外的函数库。快乐地计算吧!