表達式包含在或(())
或[]
內,shell
算數表達式:(())
express
((expression))
let expression
。條件計算表達式:[]
ide
[expression]
test
的同義詞,以[
開頭,以]
結尾。在表達式中能夠進行進制轉換:$((NUMBER#SCALE)),$((10#8)=>8ui
要獲得計算結果,須要在表達時前面加$符號,如:$[expression]
,$((expression))
code
((expr))
能夠在shell中執行,能夠對變量進行賦值運算,而不須要在前面加$號
,若是表達式執行成功則執行結果爲成功,不然是不成功,所以它能夠做爲if
的判斷表達式。在Linux中能夠使用命令來計算表達式,如expr
和let
命令。字符串
expr
expr命令用於計算表達式並將其標準輸出。it
# Usage: expr EXPRESSION # expression # 運算操做符先後要有空格 ARG1 | ARG2 位或運算 ARG1 & ARG2 位與運算 ARG1 < ARG2 ARG1 小於 ARG2 ARG1 <= ARG2 ARG1 小於等於 ARG2 ARG1 = ARG2 ARG1 等於 ARG2 ARG1 != ARG2 ARG1 不等於 ARG2 ARG1 >= ARG2 ARG1 大於等於 ARG2 ARG1 > ARG2 ARG1 大於 ARG2 ARG1 + ARG2 加法 ARG1 - ARG2 減法 ARG1 * ARG2 乘法 使用乘法時,操做符*應該被轉義:\* ARG1 / ARG2 除法 ARG1 % ARG2 取餘數 STRING : REGEXP REGEXP在STRING中的固定匹配 match STRING REGEXP 與 STRING : REGEXP 相同,若是正則與字符串相匹配則返回匹配的字符個數,不然返回0 substr STRING POS LENGTH 字符串截取,POS時開始位置,POS最小爲1,LENGTH是截取長度 # 如: expr substr raojinlin 1 3 上面命令將輸出:rao index STRING CHARS CHARS 是字符,STRING是字符串,這個表達式輸出字符在字符串中第一次出現的位置,若是字符不在字符串中則輸出0 length STRING 字符串的長度 + TOKEN 將令牌解釋成字符串,向`match`或`/`這樣的操做符 ( EXPRESSION ) EXPRESSION的值
let
let用來計算算數表達式,let不會將計算結果標準輸出,而是將結果直接賦值給了變量。io
語法:let arg [arg]
class
let計算每一個ARG做爲算術表達式。對固定寬度的整數進行評估,不檢查是否溢出,但將0除格並標記爲錯誤。下面的操做符列表分組爲等優先級操做符的級別。這些等級是按優先順序排列的。test
id++, id-- 變量自增和自減,運算前先調用變量在運算,若是變量不存在則建立一個 ++id, --id 變量自增和自減,運算前先運算在調用,若是變量不存在則建立一個 -, + 整數和負數 !, ~ 一個布爾操做符,用於將操做的值強制轉換爲布爾值並取反;位反運算 ** 冪運算 *, /, % 乘法,除法,取餘數 +, - 加法,減法 <<, >> 左移運算和右移運算,let執行結果爲表達式的計算結果 <=, >=, <, > 比較操做符,let執行結果爲表達式的計算結果 ==, != 等於,不等於 & 位與 AND ^ 位異或 XOR | 位或 OR && 邏輯與 AND || 邏輯或 OR expr ? expr : expr 條件操做,三元運算 =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= 賦值運算
## 運算符
`ID++ ID--'
變量自增和自減
運算前先調用變量在運算
`++ID --ID'
變量自增和自減
運算前先運算在調用變量
`- +'
正數負數
`! ~'
一個布爾操做符,用於將操做的值強制轉換爲布爾值並取反。
位反運算
`**'
求冪運算
`* / %'
乘、除、餘數
`+ -'
算數加法和減法
`<< >>'
左移運算
右移運算
`<= >= < >'
比較操做
`== !='
等於和不等於
`&'
位與運算
`^'
位異或運算
`|'
位或運算
`&&'
邏輯與
`||'
logical OR
`expr ? expr : expr'
三元表達式
若是第一個表達式爲真,這執行第二個表達式,不然執行第三個表達式
`= *= /= %= += -= <<= >>= &= ^= |='
賦值運算
`expr1 , expr2'
逗號
## 示例 * ```expr```
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# expr 1 + 1 2 root@iZuf6ilzd4iqvuj4dvuiwtZ:~# expr 1 \* 1 1 root@iZuf6ilzd4iqvuj4dvuiwtZ:~# expr index raojinlin r 1 root@iZuf6ilzd4iqvuj4dvuiwtZ:~# expr substr raojinlin 3 4 ojin root@iZuf6ilzd4iqvuj4dvuiwtZ:~# ```
let
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# a=1 root@iZuf6ilzd4iqvuj4dvuiwtZ:~# let a++ root@iZuf6ilzd4iqvuj4dvuiwtZ:~# let a*=2 root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo $a 4 root@iZuf6ilzd4iqvuj4dvuiwtZ:~#
(())
# a 爲上面let示例中的a變量,其值爲2 root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo $((a+1)) # shell將會解釋a變量 5 root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo $((a+1 * 2)) 6 root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo $((a+1 * 2 / 2)) 5
[]
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo $[a+4] 8 root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo $[23+4] 27 root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo $[23 <=4] 0