一、bc
1.1、交互模式
bash计算器实际上是一种编程语言,它允许在命令行中输入浮点表达式,然后解释并计算该表达式,最后返回结果。bash计算器可以识别以下几种:
- 数字(整数和浮点数)
- 变量(简单变量和数组)
- 注释(以#或C语言中的/* */开始的行)
- 表达式
- 编程语句(例如if-then语句)
- 函数
输入 bc 即可运行交互式运算;
[root@localhost tmp]# 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'.
1+1
2
7/2
3
scale=3
7/2
3.500
10/3
3.333
如上所示,在除法运算中,在 scale 值被设置前,bash计算器的计算结果不包含小数位。在把 sclae 设置成3后,bash计算器显示的结果包含 3 位小数。
1.2、非交互模式
bc也可以进行非交互式的运算,方法是与echo一起使用。
$ echo "scale=5;9+8-7*6/5^2"|bc 优先级^ > *、/ > +、- *
15.32000
$ echo "s(2/3*a(1))"|bc -l 还记得sina(30°)等于0.5么
$ echo "scale=5;sqrt(15)"|bc 开方
3.87298
$ echo "ibase=16;obase=2;ABC"|bc
101010111100
二、expr
$ expr 1 + 2
3
$ expr 1+2
1+2
$ expr 9 + 8 - 7 \* 6 / 5 + \( 4 - 3 \) \* 2
11
- 注意空格,否则不运算直接显示;
- 对于那些容易被shell错误解释的字符,需要转义;
三、$(())
等同于$[]
$ var=$((1+2))
$ echo $var
3
在使用$(())来计算公式时,不需要转义,但是这种方法不能运算小数:
$ var1=$((7/2))
$ echo $var1
3
四、$[]
等同于$(())
$ var=$[1 + 2]
$ echo $var
3
在使用方括号来计算公式时,不需要转义,但是这种方法不能运算小数:
$ var1=$[7/2]
$ echo $var1
3
五、awk
作为一个基本什么都能做的工具,数学运算肯定也是可以的:
# 基础运算:
$ echo '10 3' | awk '{print $1/$2}'
3.33333
$ echo '10 3' | awk '{print $1 * $2}'
30
# 变量
$ a=10
$ b=3
$ echo | awk "{print $a/$b}" # 注意此处必须是双引号
3.33333
# 指定小数位数:
$ echo $a $b | awk '{printf "%.2f\n", $1/$2}' # 保留两位小数
3.33