Bash腳本編程之算術運算

簡介

Bash所支持的算術運算和C語言是一樣的,這裏指的是操作符(operator)以及它們的優先級(precedence)、結合性(associativity)和值,詳見Shell Arithmetic (Bash Reference Manual)。

注意:如果乘號“*”在某些場景中失效,有可能是它被解釋成了通配符,可嘗試對其轉義。

1+2=3

在上面這個簡單的算術運算中,1和2叫做操作數/運算元(operand),“+”加號叫做操作符/運算符(operator),1+2整個叫做算術表達式(arithmetic expression),對於算術表達式的求值過程叫做evaluate。

在bash腳本編程中,變量的默認類型是字符串型,因此是無法直接執行算術運算的。

[root@c7-server ~]# num1=3
[root@c7-server ~]# num2=4
[root@c7-server ~]# echo $num1+$num2
3+4

即便是使用declare命令顯式聲明變量爲整型,也是不行的。

[root@c7-server ~]# declare -i num1=3
[root@c7-server ~]# declare -i num2=4
[root@c7-server ~]# echo $num1+$num2
3+4

方法

在bash中,想要支持算術運算有以下四種方式:

方法一:內置命令let

let arg [arg ...]

每個arg,都是一個算術表達式。

[root@c7-server ~]# num1=5
[root@c7-server ~]# num2=10
[root@c7-server ~]# let sum=$num1+$num2
[root@c7-server ~]# echo $sum
15

一般都會使用一個變量來存儲算術表達式的結果,let命令本身是不會將算術表達式的結果返回的。

[root@c7-server ~]# let $num1+$num2
[root@c7-server ~]#

方法二:$[ARITHMETIC EXPRESSION]

這種方式,馬哥有提到,但是在bash的手冊中似乎沒找到。應該是一種非官方的方式,慎用。

[root@c7-server ~]# sum=$[$num1+$num2]
[root@c7-server ~]# echo $sum
15

方法三:Bash算術展開

這個是bash自身支持的shell展開中的一種。Arithmetic Expansion (Bash Reference Manual)

$(( ARITHMETIC EXPRESSION ))
[root@c7-server ~]# sum=$(($num1+$num2))
[root@c7-server ~]# echo $sum
15

方法四:外部命令expr

需要使用命令替換的方式來賦值。

[root@c7-server ~]# expr $num1 + $num2
15
[root@c7-server ~]# sum=$(expr $num1 + $num2)
[root@c7-server ~]# echo $sum
15

操作符的兩邊需要有空格,不然操作符無法被正確解釋。

[root@c7-server ~]# expr $num1+$num2
5+10

總結

內置命令let和shell展開中的算術展開是bash所自帶的算術運算方式,比較推薦使用這類方式;外部命令expr是來自於CentOS所提供的程序包coreutils;最後的$[…]沒有找到其來源,可以不使用它。

在本實例中只展示了簡單的加法運算,在實際使用當中會比較複雜,建議用戶可使用一種方式(如算術展開)來熟練即可。

發佈了15 篇原創文章 · 獲贊 13 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章