参考:http://c.biancheng.net/view/2680.html
windows系统安装时会自带计算器,在cmd中运行calc即可打开。那么linux系统中有没有计算器呢?答案是肯定的。
linux下的图形计算器
linux系统一般也会默认安装一个图形界面的计算器,例如红帽系统默认安装的是gcalctool。假如在一个图形桌面环境中需要一个计算器时,在终端中运行gcalctool即可打开。
如果系统没有运行桌面环境,那是否有一个支持命令行的计算器呢?
linux下的命令行计算器
bc是任意精度计算器,官方对它的描述是“an arbitrary precision calculator language”,一种支持任意精度计算的计算器语言,它支持变量、数组、输入输出、分支结构、循环结构、函数等基本的编程元素。bc可以在交互环境下使用,也可以再shell编程中使用。
* 交互模式下使用bc
在终端中输入bc --help,可以查看bc的使用说明:
[release@redhat59-211 ~]$ bc -h
usage: bc [options] [file ...]
-h --help print this usage and exit,显示帮助
-i --interactive force interactive mode,强制进入交互模式
-l --mathlib use the predefine math routnes,加载数学库
-q --quiet don't print initial banner,不打印版本信息
-s --standard non-standard bc constructs are errors
-w --warn warn about non-standard bc constructs
-v --version print version information and exit,显示版本
bc有四个常用的内置变量,如下表所示:
变量名 | 作用 |
---|---|
scale | 指定精度,即小数点后的位数,默认为0,所以默认执行1/2,结果为0 |
ibase | 指定输入的数字的进制,如ibase=2 |
obase | 指定输入数字的进制,如果需要设置ibase和obase,应先设置obase |
last | 表示最近打印的数字 |
在终端中输入bc
,可以进行bc的交互模式,然后输入想要计算的表达式即可。示例如下图,可见bc支持变量、函数,功能还是挺强大的。
[release@redhat59-211 ~]$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+1
2
n=2
n+1
3
sqrt(9)
3
define myadd(a,b){
return a+b;
}
myadd(1,2)
3
last
3
1/2
0
scale=2
1/2
0.50
obase=2
ibase=10
10
1010
此外,如果想计算正弦、余弦、正切等,可以在启动bc时加-l参数,如bc -l
,这样就引入了数学库,可以使用s(1)计算1的正弦值。
函数名 | 作用 |
---|---|
s(x) | 计算正弦值,x为弧度值 |
c(x) | 计算余弦值 |
a(x) | 计算反正切值 |
l(x) | 计算x的自然对数 |
e(x) | 计算e的x次方 |
j(n,x) | 贝塞尔函数,计算从n到x的阶数 |
[root@localhost bin]# bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
s(1)
.84147098480789650665
c(1)
.54030230586813971740
s(1)*s(1)+c(1)*c(1)
.99999999999999999999
* shell脚本中使用bc计算器
在shell脚本中可以借助管道或者输入重定向来使用bc计算器。
- 借助管道使用bc
echo "expression"|bc,其中expression是计算的数学表达式。
示例:var=$(echo "1+1"|bc),将1+1的计算结果赋值给var变量
[release@redhat59-211 ~]$ echo "10^2"|bc
100
[release@redhat59-211 ~]$ var=$(echo "10^2"|bc)
[release@redhat59-211 ~]$ echo $var
100
[release@redhat59-211 ~]$ echo "$var*2"|bc
200
[release@redhat59-211 ~]$ echo "obase=2;10"|bc 10转换为2进制
1010
- 借助重定向使用bc
使用方法:
var=$(bc <<EOF
expressions
EOF
)
示例:
[release@redhat59-211 ~]$ var=$(bc <<EOF
> obase=10;
> ibase=16;
> F
> EOF
> )
[release@redhat59-211 ~]$ echo $var
15
更多例子请参考:
https://blog.csdn.net/pdcxs007/article/details/48222663#示例一指定pi的值