簡介
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;最后的$[...]沒有找到其來源,可以不使用它,
在本實體中只展示了簡單的加法運算,在實際使用當中會比較復雜,建議用戶可使用一種方式(如算術展開)來熟練即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/145674.html
標籤:Linux
下一篇:CentOS下 安裝 Nginx
