linux下执行数学运算 (expr/bc/方括号/awk)

1. expr
expr命令可以在命令行中处理数学表达式,但是会比较麻烦。
$ expr 1 + 2
3
expr命令能够识别少数的数学和字符串操作符:

需要注意的是对于那些容易被shell错误解释的字符,需要转义:
$ expr 5 \* 2
10
写在脚本中:
var1=10
var2=20
var3=$(expr $var2 / $var1)
echo The result is $var3
2. 方括号
在bash中,在将一个数学运算结果赋给某个变量时,可以用美元符和方括号($[ operation ])来实现。
$ var=$[1 + 2]
$ echo $var
3
另外,在使用方括号来计算公式时,不需要转义。
但是这种方法不能运算小数:
$ var1=$[7/2]
$ echo $var1
3
3. bc
bash计算器实际上是一种编程语言,它允许在命令行中输入浮点表达式,然后解释并计算该表达式,最后返回结果。bash计算器可以识别以下几种:
- 数字(整数和浮点数)
- 变量(简单变量和数组)
- 注释(以#或C语言中的/* */开始的行)
- 表达式
- 编程语句(例如if-then语句)
- 函数
输入bc即可运行:

如上所示,在除法运算中,在scale值被设置前,bash计算器的计算结果不包含小数位。在把sclae设置成3后,bash计算器显示的结果包含3位小数。
bc的变量运算和输出:

4. awk
作为一个基本什么都能做的工具,数学运算肯定也是可以的:
# 基础运算:
$ echo '10 3' | awk '{print $1/$2}'
3.33333
$ echo '10 3' | awk '{print $1 * $2}'
$ a=10
$ b=3
$ echo | awk "{print $a/$b}" # 注意此处必须是双引号