手機版
你好,游客 登錄 注冊
背景:
閱讀新聞

Bash腳本編程之算術運算

[日期:2020-01-06] 來源:cnblogs.com/alongdidi  作者:阿龍弟弟 [字體: ]

簡介

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

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

1+2=3

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

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

[[email protected] ~]# num1=3
[[email protected] ~]# num2=4
[[email protected] ~]# echo $num1+$num2
3+4

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

[[email protected] ~]# declare -i num1=3
[[email protected] ~]# declare -i num2=4
[[email protected] ~]# echo $num1+$num2
3+4

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

方法一:內置命令let

let arg [arg ...]

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

[[email protected] ~]# num1=5
[[email protected] ~]# num2=10
[[email protected] ~]# let sum=$num1+$num2
[[email protected] ~]# echo $sum
15

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

[[email protected] ~]# let $num1+$num2
[[email protected] ~]#

方法二:$[ARITHMETIC EXPRESSION]

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

[[email protected] ~]# sum=$[$num1+$num2]
[[email protected] ~]# echo $sum
15

方法三:Bash算術展開

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

$(( ARITHMETIC EXPRESSION ))

[[email protected] ~]# sum=$(($num1+$num2))
[[email protected] ~]# echo $sum
15

方法四:外部命令expr

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

[[email protected] ~]# expr $num1 + $num2
15
[[email protected] ~]# sum=$(expr $num1 + $num2)
[[email protected] ~]# echo $sum
15

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

[[email protected] ~]# expr $num1+$num2
5+10

總結

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

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

Linux公社的RSS地址http://www.okbuvi.live/rssFeed.aspx

本文永久更新鏈接地址http://www.okbuvi.live/Linux/2020-01/161940.htm

linux
本文評論   查看全部評論 (0)
表情: 表情 姓名: 字數

       

評論聲明
  • 尊重網上道德,遵守中華人民共和國的各項有關法律法規
  • 承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
  • 本站管理人員有權保留或刪除其管轄留言中的任意內容
  • 本站有權在網站內轉載或引用您的評論
  • 參與本評論即表明您已經閱讀并接受上述條款
海口彩票论坛