Linux bc命令实现数学计算器
BashShell内置了对整数运算的支持,但是并不支持浮点运算,而Linuxbc命令可以很方便的进行浮点运算,当然整数运算也不再话下。
bc甚至可以称得上是一种编程语言了,它支持变量、数组、输入输出、分支结构、循环结构、函数等基本的编程元素,所以Linux手册中是这样来描述bc的:
Anarbitraryprecisioncalculatorlanguage
翻译过来就是“一个任意精度的计算器语言”。
在终端输入bc命令,然后回车即可进入bc进行交互式的数学计算。在Shell编程中,我们也可以通过管道和输入重定向来使用bc。
本节我们先学习如何在交互式环境下使用bc,然后再学习如何在Shell编程中使用bc,这样就易如反掌了。
从终端进入bc
在终端输入bc命令,然后回车,就可以进入bc,请看下图:
bc命令还有一些选项,可能你会用到,请看下表。
选项 | 说明 |
---|---|
-h|--help | 帮助信息 |
-v|--version | 显示命令版本信息 |
-l|--mathlib | 使用标准数学库 |
-i|--interactive | 强制交互 |
-w|--warn | 显示POSIX的警告信息 |
-s|--standard | 使用POSIX标准来处理 |
-q|--quiet | 不显示欢迎信息 |
例如你不想输入bc命令后显示一堆没用的信息,那么可以输入bc-q:
在交互式环境下使用bc
使用bc进行数学计算是非常容易的,像平常一样输入数学表达式,然后按下回车键就可以看到结果,请看下图。
值得一提的是,我们定义了一个变量n,然后在计算中也使用了n,可见bc是支持变量的。
除了变量,bc还支持函数、循环结构、分支结构等常见的编程元素,它们和其它编程语言的语法类似。下面我们定义一个求阶乘的函数:
其实我们很少使用这么复杂的功能,大部分情况下还是把bc作为普通的数学计算器,求一下表达式的值而已,所以大家不必深究,了解一下即可。
内置变量
bc有四个内置变量,我们在计算时会经常用到,如下表所示:
变量名 | 作用 |
---|---|
scale | 指定精度,也即小数点后的位数;默认为0,也即不使用小数部分。 |
ibase | 指定输入的数字的进制,默认为十进制。 |
obase | 指定输出的数字的进制,默认为十进制。 |
last或者. | 表示最近打印的数字 |
【实例1】scale变量用法举例:
刚开始的时候,10/3的值为3,不带小数部分,就是因为scale变量的默认值为0;后边给scale指定了一个大于0的值,就能看到小数部分了。
【实例2】ibase和obase变量用法举例:
注意:obase要尽量放在ibase前面,因为ibase设置后,后面的数字都是以ibase的进制来换算的。
内置函数
除了内置变量,bc还有一些内置函数,如下表所示:
函数名 | 作用 |
---|---|
s(x) | 计算x的正弦值,x是弧度值。 |
c(x) | 计算x的余弦值,x是弧度值。 |
a(x) | 计算x的反正切值,返回弧度值。 |
l(x) | 计算x的自然对数。 |
e(x) | 求e的x次方。 |
j(n,x) | 贝塞尔函数,计算从n到x的阶数。 |
要想使用这些数学函数,在输入bc命令时需要使用-l选项,表示启用数学库。请看下面的例子:
在一行中使用多个表达式
在前边的例子中,我们基本上是一行一个表达式,这样看起来更加舒服;如果你愿意,也可以将多个表达式放在一行,只要用分号;隔开就行。请看下面的例子:
在Shell中使用bc计算器
在Shell脚本中,我们可以借助管道或者输入重定向来使用bc计算器。
- 管道是Linux进程间的一种通信机制,它可以将前一个命令(进程)的输出作为下一个命令(进程)的输入,两个命令之间使用竖线|分隔。
- 通常情况下,一个命令从终端获得用户输入的内容,如果让它从其他地方(比如文件)获得输入,那么就需要重定向。
此处我们并不打算展开讲解管道和重定向,不了解的小伙伴请自行百度。
借助管道使用bc计算器
如果读者希望直接输出bc的计算结果,那么可以使用下面的形式:
echo"expression"|bc
expression就是希望计算的数学表达式,它必须符合bc的语法,上面我们已经进行了介绍。在expression中,还可以使用Shell脚本中的变量。
使用下面的形式可以将bc的计算结果赋值给Shell变量:
variable=$(echo"expression"|bc)
variable就是变量名。
【实例1】最简单的形式:
[jb51.net]$echo"3*8"|bc 24 [jb51.net]$ret=$(echo"4+9"|bc) [jb51.net]$echo$ret 13
【实例2】使用bc中的变量:
[jb51.net]$echo"scale=4;3*8/7"|bc 3.4285 [jb51.net]$echo"scale=4;3*8/7;last*5"|bc 3.4285 17.1425
【实例3】使用Shell脚本中的变量:
[jb51.net]$x=4 [jb51.net]$echo"scale=5;n=$x+2;e(n)"|bc-l 403.42879
在第二条命令中,$x表示使用第一条Shell命令中定义的变量,n是在bc中定义的新变量,它和Shell脚本是没关系的。
【实例4】进制转换:
#十进制转十六进制 [mozhiyan@localhost~]$m=31 [mozhiyan@localhost~]$n=$(echo"obase=16;$m"|bc) [mozhiyan@localhost~]$echo$n 1F #十六进制转十进制 [mozhiyan@localhost~]$m=1E [mozhiyan@localhost~]$n=$(echo"obase=10;ibase=16;$m"|bc) [mozhiyan@localhost~]$echo$n 30
借助输入重定向使用bc计算器
可以使用下面的形式将bc的计算结果赋值给Shell变量:
variable=$(bc<其中,variable是Shell变量名,express是要计算的数学表达式(可以换行,和进入bc以后的书写形式一样),EOF是数学表达式的开始和结束标识(你也可以换成其它的名字,比如aaa、bbb等)。
请看下面的例子:
[jb51.net]$m=1E [jb51.net]$n=$(bc<obase=10; >ibase=16; >print$m >EOF >) [jb51.net]$echo$n 30 如果你有大量的数学计算,那么使用输入重定向就比较方便,因为数学表达式可以换行,写起来更加清晰明了。
到此这篇关于Linuxbc命令实现数学计算器的文章就介绍到这了,更多相关Linuxbc数学计算器内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!