前言
shell 脚本里可用 echo $(( expr ))
方式进行简单计算,而对于复杂计算就无能为力。
而这时 bc (Basic Calculator)命令就可以派上用场,本文就介绍下这个命令的用法。
基础用法
bc 命令通过标准输入、文件或交互式(interactive)方式,获取待计算的表达式然后输出结果。
> echo "1+1" | bc
2
> bc -q calc.bc
2
> bc -q
1+1
2
备注:
-q
选项表示不显示初始化文字。
变量
bc 支持使用变量,变量标识符以小写字母开头,后面可以为小写字母、数字和下划线。
> bc -q
var_1=1
var_1+var_1
2
大写字母用于代表数值常量,A代表10,按序递增1。
> bc -q
A
10
Z
35
变量未定义初始值为0,如下例子所示:
> bc -q
undefined += 2
undefined
2
内置变量
除了自定义变量,bc 还内置了以下变量:
- ibase 设置输入进制,默认值为10即十进制;
- obase 设置输出进制,默认值为10即十进制;
- scale 设置输出的小数位数,只对除、取余、乘幂有效,默认值为0,使用
-l
选项开启数学库时默认值为20; - last 表示最后一个输出值。
进制转换
通过内置变量可以很方便的进行进制转换,如以下例子将16进制转换为10进制:
> echo "obase=10;ibase=16;FF" | bc
255
备注:同一行中支持分号分隔多个表达式。
函数
bc 命令支持自定义函数,以关键字 define
开头,如以下例子定义了 sum 函数,对参数a和b相加返回,并在下一行进行了调用:
> bc -q
define sum(a, b) { return a + b; }
sum(1, 1)
2
内置函数
和变量一样,bc 命令也内置了一些数学库函数,使用 -l
选项开启,下面例子用内置的反正切函数(atan)计算圆周率 π:
> bc -l
a(1)*4
3.14159265358979323844
更多内置函数说明可以参考此网址 bc command manual - Math Libary Functions,或使用命令 man bc
查看手册。
语句
bc 也支持语句,例如 if else 语句:
> bc -q
f=0
if (f == 0) {
print "Equal zero.\n";
} else {
print "Not equal zero.\n";
}
Equal zero.
其它的 for
、break
和 return
等语句的语法和 c 类似,这里就不做介绍,具体可以使用命令 man bc
查看手册里说明。