天天看點

shell中數字計算方法(bc/expr/$(())/let/awk)

1.bc

常用計算工具,而且支援浮點運算:

[root@web01 shell]# echo 1+1 | bc

2

浮點數精度問題未解決

[root@web01 shell]# echo "1.2*1.2" | bc

1.4

[root@web01 shell]# echo "scale=2;1.2*1.2" | bc

1.44

[root@web01 shell]# echo "5.0/3.0" | bc

1

[root@web01 shell]# echo "scale=2;5.0/6.0"|bc

.83

2.expr

 不支援浮點運算,注意運算符左右都有空格,使用乘号時,必須用反斜線屏蔽其特定含義

[root@web01 shell]# expr 10 + 10

20

[root@web01 shell]# expr 1500 + 900

2400

[root@web01 shell]# expr 30 / 3

10

[root@web01 shell]# expr 30 / 3 / 2

5

[root@web01 shell]# expr 30 \* 3

90

3.$(())

同expr,不支援浮點數運算

[root@web01 shell]# echo $((1+1))

[root@web01 shell]# echo $((2*3))

6

[root@web01 shell]# echo $((6/2))

3

[root@web01 shell]# echo $((6/5))

4.let

不支援浮點數運算,而且不支援直接輸出,隻能指派

[root@web01 shell]# let a=10+10

[root@web01 shell]# echo $a

[root@web01 shell]# let b=50/5

[root@web01 shell]# echo $b

[root@web01 shell]# let c=6*5

[root@web01 shell]# echo  $c

30

[root@web01 shell]# let c=6/5

5.awk

普通的運算:

[root@web01 shell]# echo|awk '{print(1+1)}'

[root@web01 shell]# echo|awk '{print(1/2)}'

0.5

[root@web01 shell]# echo|awk '{print(1/3)}'

0.333333

[root@web01 shell]# echo|awk '{print(3*5)}'

15

控制精度(printf):

[root@web01 shell]# echo | awk '{printf("%.2f \n",1/2)}'

[root@web01 shell]# echo | awk '{printf("%.4f \n",1/3)}'

0.3333

傳遞參數:

[root@web01 shell]# echo | awk -v a=5 -v b=6 '{printf("%.4f \n",a/b)}'注:該方法a,b不需加$符

0.8333

[root@web01 shell]# a=5

[root@web01 shell]# b=6

[root@web01 shell]# echo|awk "{print($a/$b)}"注:該方法需在大括号外打雙引号

0.833333

本文轉自 fxl風 51CTO部落格,原文連結:http://blog.51cto.com/fengxiaoli/1952187