shell中数字计算方法(bc/expr/$(())/let/awk)
1.bc常用计算工具,而且支持浮点运算:
# echo 1+1 | bc
2
浮点数精度问题未解决
# echo "1.2*1.2" | bc
1.4
# echo "scale=2;1.2*1.2" | bc
1.44
# echo "5.0/3.0" | bc
1
# echo "scale=2;5.0/6.0"|bc
.83
2.expr
不支持浮点运算,注意运算符左右都有空格,使用乘号时,必须用反斜线屏蔽其特定含义
# expr 10 + 10
20
# expr 1500 + 900
2400
# expr 30 / 3
10
# expr 30 / 3 / 2
5
# expr 30 \* 3
90
3.$(())
同expr,不支持浮点数运算
# echo $((1+1))
2
# echo $((2*3))
6
# echo $((6/2))
3
# echo $((6/5))
1
4.let
不支持浮点数运算,而且不支持直接输出,只能赋值
# let a=10+10
# echo $a
20
# let b=50/5
# echo $b
10
# let c=6*5
# echo$c
30
# let c=6/5
# echo$c
1
5.awk
普通的运算:
# echo|awk '{print(1+1)}'
2
# echo|awk '{print(1/2)}'
0.5
# echo|awk '{print(1/3)}'
0.333333
# echo|awk '{print(3*5)}'
15
控制精度(printf):
# echo | awk '{printf("%.2f \n",1/2)}'
0.50
# echo | awk '{printf("%.4f \n",1/3)}'
0.3333
传递参数:
# echo | awk -v a=5 -v b=6 '{printf("%.4f \n",a/b)}'注:该方法a,b不需加$符
0.8333
# a=5
# b=6
# echo|awk "{print($a/$b)}"注:该方法需在大括号外打双引号
0.833333
页:
[1]