Linux shell 編程(六):運算
阿新 • • 發佈:2018-04-21
運算 shell let expr 運算
表達式
表達式包含在或(())
或[]
內,
-
算數表達式:
(())
((expression))
- 這個表達式是根據算術計算的規則來計算的。相當於
let expression
。
-
條件計算表達式:
[]
[expression]
- 這是內置命令
test
的同義詞,以[
開頭,以]
結尾。
在表達式中可以進行進制轉換:$((NUMBER#SCALE)),$((10#8)=>8
要得到計算結果,需要在表達時前面加$符號,如:$[expression]
,$((expression))
- 區別
- 這兩種的區別在於
((expr))
可以在shell中執行,可以對變量進行賦值運算,而不需要在前面加$號
if
的判斷表達式。
- 這兩種的區別在於
命令計算表達式
在Linux中可以使用命令來計算表達式,如expr
和let
命令。
expr
expr命令用於計算表達式並將其標準輸出。
# 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不會將計算結果標準輸出,而是將結果直接賦值給了變量。
語法:let arg [arg]
let計算每個ARG作為算術表達式。對固定寬度的整數進行評估,不檢查是否溢出,但將0除格並標記為錯誤。下面的操作符列表分組為等優先級操作符的級別。這些等級是按優先順序排列的。
- let 參數
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
Linux shell 編程(六):運算