表达式包含在或(())
或[]
内,
算数表达式:(())
((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除格并标记为错误。下面的操作符列表分组为等优先级操作符的级别。这些等级是按优先顺序排列的。
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
原文地址:http://blog.51cto.com/jlnetc/2106096