shell中的數值運算


By francis_hao    Oct 2,2017

 

本文摘錄自bash的man手冊。

 

算數運算相關的形式

形式

含義

((expression))

expression按照下面描述的算術運算規則進行運算。如果最終結果是非0的,返回0。其他結果返回1。該形式和let "expression"等同

let arg [arg ...]

每個arg都是一個算數表達式,如果最后一個arg結果是非0的,返回0,其他結果返回1。

 

算數擴展

算數擴展允許計算算數表達式,並替換該結果。算數擴展的形式是

$((expression))

expression被視作在雙引號""中,但是在圓括號中雙引號不被特殊處理。expression中的所有項都會被參數擴展和命令替換。如果expression無效,bash會打印一條指示失敗的信息。另外,算數擴展可以嵌套。

例如:

其中,算數擴展會直接替換結果,因此$((1+1))就結果來說,就是2。

 

算術運算

在特定的環境下(例如let和算數擴展中),shell允許數值的算數運算,運算在固定長度的整數中運算,並且不檢查是否溢出。除以0會被捕獲並標記為錯誤(打印一條錯誤信息)。運算符和他們的優先級、結合律和C語言中的一致,括號可以改變優先級。下表按照優先級由高到低排序。

運算符

說明

id++ d--

自增,自減(先取值后運算)

++id --id

自增,自減(先運算后取值)

  • +

一元的負號和正號

! ~

邏輯非和按位非

**

乘方

* / %

 

+ -

 

<< >>

 

<= >= < >

 

== !=

 

&

 

^

按位異或

|

 

&&

 

||

 

expr?expr:expr

 

= *= /= %= += -= <<= >>= &= ^= |=

 

expr1 , expr2

逗號

 

在表達式中,shell變量可以不使用$來引用,一個null或未設置的變量被當做0來處理。變量可以通過declare的-i選項來設置其整數屬性,但是,在算數表達式中的變量不是必須擁有整數屬性,因為表達式中默認當作整數處理。

以0開頭的常數被解釋成八進制數,以0x或0X開頭標記為十六進制,其他的進制可以通過[base#]n來表示,其中,可選的base是一個十進制數,在0-64之間,表示進制。n是指定的進制的數,如果base#被省略,則使用十進制。大於9的數字會使用小寫字母、大寫字母、@和_按順序表示。最大為64進制,就是最大要能表示到63,那么0-9代表0-9,a-z表示10-35,A-Z表示36-61,@表示62,_表示63。

 

 


本文由 劉英皓 創作,采用 知識共享署名-非商業性使用-相同方式共享3.0中國大陸許可協議 進行許可。歡迎轉載,請注明出處:
轉載自:http://www.cnblogs.com/yinghao1991/p/7622777.html

 

 

參考

【1】腳本之家 http://www.jb51.net/article/57943.htm Shell腳本中不同進制數據轉換

【2】stackoverflow.com https://stackoverflow.com/questions/27738943/what-is-unary-plus-minus-in-r

【3】man sh


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM