表达式包含在或(())
或[]
内,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