linux 的数字运算

linux 提供以下几种数字运算的方式

  • expr
  • [] 通过方括号将数字运算结果赋值给变量。
  • bc 计算器

而通常来说,bc 计算器使用是最方便的。

脚本中使用bc

我们可以利用管道的特性,将内容传递给bc 计算器,再将返回的值赋值给变量。
基本格式:variable=$(echo "options; expression" | bc)

尝试一下,我们可以通过scale 来设定bc 的参数。

  1. $ cat test8
  2. #!/bin/bash
  3. a=$(echo "scale=4;23/3" | bc)
  4. echo "The answer is $a."
  5. $ test8
  6. The answer is 7.6666.

当然,对于表达式,我们也可以不局限于只使用数字,也可以使用shell 脚本里定义好的变量。

应用不同的变量,我们可以进行复杂的运算。对于较短的运算,还不是特别麻烦,但一旦涉及的运算内容复杂起来了,不断的使用bc 进行赋值就显得非常麻烦了。

这时候我们可以使用内联输入重定向。标准格式如下:

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

尝试一下:

$ cat test9
#!/bin/bash
v1=10.33
v2=12.31
v3=213.22
v4=232.21

v5=$(bc << eof
scale=4
a1=($v1/$v2)
a2=($v3/$v4)
a1+a2
eof
)

echo "The anwser is $v5."

如果不使用内联输入重定向的情况。

$ cat test10
#!/bin/bash
v1=10.33
v2=12.31
v3=213.22
v4=232.21

a1=$(echo "scale=4;$v1/$v2"|bc)
a2=$(echo "scale=4;$v3/$v4"|bc)

v5=$(echo "scale=4;$a1+$a2"|bc)

echo "The anwser is $v5."

对比不难发现,使用重定向输入会简化许多。