[Linux] shell數值計算的幾種方式

shell數值計算相關命令:bc、expr、let

let、expr無法進行浮點運算;bc、awk可以進行浮點運算,bc的除法是地板除,awk的除法是精確的。

bc、expr可直接顯示計算結果;let丟棄計算結果,可傳遞結果到變量。

數字和運算符之間有無空格,expr->必須有空格,let->不能有空格,bc->有無空格均可

1)expr
@數字和運算符之間要有空格
[root@xxx ~]# expr 200+1
200+1
[root@xxx ~]# expr 200/1
200/1

@加減乘除,注意乘法"\*"
[root@xxx ~]# expr 200 + 1
201
[root@xxx ~]# expr 200 - 1
199
[root@xxx ~]# expr 200 * 2
expr: syntax error
[root@xxx ~]# expr 200 \* 2
400
[root@xxx ~]# expr 200 / 2
100
[root@xxx ~]# expr 200 + 2 \* 2
204

@運算數得是整數
[root@xxx ~]# expr 20.0 + 2 \* 2
expr: non-integer argument


2)bc
@加減乘除
[root@xxx ~]# echo 30+1 | bc
31
[root@xxx ~]# echo 30-1 | bc
29
[root@xxx ~]# echo 30*2 | bc
60
[root@xxx ~]# echo 30/2 | bc
15

@可以進行浮點運算

[root@xxx ~]# echo 30.2+1 | bc
31.2

@除法是地板除
[root@xxx ~]# echo 30.2/2+1 | bc
16
[root@xxx ~]#

3)let
@數字和運算符之間不能有空格
[root@xxx ~]# let i=40 + 3
-bash: let: +: syntax error: operand expected (error token is "+")
[root@xxx ~]# let i= 40+3
-bash: let: i=: syntax error: operand expected (error token is "=")

@加減乘除
[root@xxx bin]# let i=40+3
[root@xxx bin]# echo $i
43
[root@xxx bin]# let i=40-3
[root@xxx bin]# echo $i
37
[root@xxx bin]# let i=40*3
[root@xxx bin]# echo $i
120
[root@xxx bin]# let i=40/3
[root@xxx bin]# echo $i
13

@運算數得是整數
[root@xxx bin]# let i=40.3/3
-bash: let: i=40.3/3: syntax error: invalid arithmetic operator (error token is ".3/3")
[root@xxx bin]#

4)awk
[root@xxx ~]# i=20
[root@xxx ~]#
[root@xxx ~]# i=$(echo "$i 6" | awk '{print $1+$2;}')
[root@xxx ~]#
[root@xxx ~]# echo $i
26
[root@xxx ~]# i=$(echo "$i 6" | awk '{print $1+$2}')
[root@xxx ~]# echo $i
32
[root@xxx ~]# i=$(echo "$i 6.6" | awk '{print $1+$2}')
[root@xxx ~]# echo $i
38.6
[root@xxx ~]#


5)shell腳本中,給變量賦值可以使用反引號或者$()
test.sh內容如下,

echo "initial value for i is 1."
echo "case1"
i=1
echo $i+1

echo "case2-1"
i=1
i=`expr $i+1`
echo $i

echo "case2-2"
i=1
i=$(expr $i+1)
echo $i

echo "case3-1"
i=1
i=`expr $i + 1`
echo $i

echo "case3-2"
i=1
i=$(expr $i + 1)
echo $i

echo "case4"
i=1
((i=$i+1))
echo $i

echo "case5"
i=1
((i++))
echo $i

echo "case6"
i=1
let i=i+1
echo $i

echo "case7"
i=1
let i++
echo $i

echo "case8"
i=1
i=$[i+1]
echo $i

執行結果如下,
[root@xxx ~]# ./test.sh
initial value for i is 1.
case1
1+1
case2-1
1+1
case2-2
1+1
case3-1
2
case3-2
2
case4
2
case5
2
case6
2
case7
2
case8
2


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章