daerzei的专栏

Java, Linux, Spark, Hadoop, HBase, Hive, Solr, Python, Scala

Linux小数数值计算之bc命令

前言

Linux版本:CentOS7.4 64位

这里所有提到的shell都是bash shell,不过推荐你可以学学zsh
Linux Shell进行数值计算的时候,
使用expr,很麻烦,乘号啊什么的还需要转译,
使用美刀符($)加中括号,却只局限于整数计算,
这里介绍一下
Linux的bc命令,它相当于Linux内建的计算器,可以计算整数,也可以进行浮点计算(小数)
你可以叫它bc计算器,也可以叫bash计算器,它就是bash内置的计算器

bc命令的基本用法

你甚至可以把bc称作一种编程语言,它允许在命令行中输入浮点表达式,然后解释并计算该表达式,最后返回结果。bc计算器能够识别的东东:

  • 数字(整数和浮点数)
  • 变量(简单变量和数组)
  • 注释(以#或C语言中的/* */开始的行)
  • 表达式
  • 编程语句
  • 函数

可以直接在命令行使用bc命令:

[dong@cwd shell]$ bc
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'.
12 * 3.14
37.68
8 * 3.14
25.12

quit

Linux shell小数数值计算之bc命令01

上面是bc计算器的欢迎界面,如果你觉得多余可以使用 -q参数把它去掉

浮点数的小数位数是由内建变量scale控制的。
必须将这个值设置为你希望在计算结果中保留的小数位,
否则无法得到期望的结果

[dong@cwd shell]$ bc -q
3.14 /5
0
scale=4
3.14 / 5
.6280

quit

Linux shell小数数值计算之bc命令02

scala变量的默认值是0
在scala值被设置之前,bc计算结果不包含小数位。
在将其值设置成4后,bc计算器显示的结果包含4位小数。
-q参数可以不显示bc计算器冗长的欢迎信息。

除了普通数字,bc计算器还能支持变量

[dong@cwd shell]$ bc -q
var1=10
var1 * 4
40
var2 = var1 / 5
print var2
2
println var2
(standard_in) 6: syntax error

quit

Linux shell小数数值计算之bc命令03

变量一旦被定义,就可以在整个bc 计算器会话中使用该变量了,print语句允许你打印变量和数字。

在脚本中使用bc计算器

现在你可能想问bc计算器是如何在shell脚本中帮助处理小数运算的?
可以采用如下的格式在shell脚本中使用bc命令,并将返回结果赋给一个变量。
基本格式如下:

variable=$(echo "options; expression" | bc)

第一部分options允许你设置变量。如果你需要不止一个变量,可以用分号将其分开。
expression参数定义了通过bc执行的数学表达式。
OK,下面来个Demo:

[dong@cwd shell]$ vim create_base_script.sh

#!/bin/bash
# 测试在脚本中使用bc命令
# 可以用命令替换运行bc命令,燕将输出赋给一个变量,基本格式如下:
# variable=$(echo "options; expression" | bc)
# 第一部分options允许你设置变量。如果你需要不止一个变量,可以用分号将其分开。
# expression参数定义了通过bc执行的数学表达式。这里有个在脚本中这么做的例子。
var1=$(echo "scale=4; 3.44 /5" | bc)
echo The answer is $var1

这个例子将scale变量设置成4位小数,并在expression部分指定了特定的运算。运行这个脚本会产生如下输出:
Linux shell小数数值计算之bc命令04

是不是很神奇啊?
当然除了被赋值,那个变量(var3)也可以用于其他运算了
看下面的例子:

[dong@cwd shell]$ vim create_base_script3.sh
#!/bin/bash
# 在bc命令中测试使用变量
var1=20
var2=3.1415
var3=$(echo "scale=4; $var1 * $var1" | bc)
var4=$(echo "scale=4; $var3 * $var2" | bc)

echo var3 = $var3
echo var4 = $var4

代码截图及运行结果如下:
Linux shell小数数值计算之bc命令05
这个方法适用于较短的运算,
但是有时你会涉及更多的数字。
如果需要进行大量运算,在一个命令行中列出多个表达式就会有点麻烦。

·怎!么!办!呢!
你可以先把Demo敲一遍再看为什么
最好的办法是使用内联输入重定向,
它允许你直接在命令行中重定向数据。
在shell脚本中,你可以将输出赋给一个变量:

variable=$(bc << EOF
options
statements
expressions
EOF
)
EOF

文本字符串标识了内联重定向数据的起止。
记住,仍然需要将bc命令的输出赋值给变量,
下面来一个例子:

[dong@cwd shell]$ sh create_base_script4.sh  
#!/bin/bash
# 测试bc命令在内联输入重定向下的使用
var1=3.14
var2=2.5
var3=16
var4=2.7

var5=$(bc << EOF
scale = 4
a1 = ( $var1 * $var2)
a2 = ($var3 * $var4)
a1 + a2
EOF
)

echo var5 = $var5

代码截图
Linux shell小数数值计算之bc命令06
输出结果如下:
Linux shell小数数值计算之bc命令07

EOF字符串标识了重定向给bc命令的数据的起止。
当然,必须用美刀符$(xxx)来标识出用来给变量赋值的命令。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daerzei/article/details/80341339
个人分类: Linux 大数据
想对作者说点什么? 我来说一句

第一个linux命令 bc的用法

testmyieda22 testmyieda22

2016-11-17 14:00:00

阅读数:469

没有更多推荐了,返回首页

不良信息举报

Linux小数数值计算之bc命令

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭