运算
表达式
表达式包含在或(())
或[]
内,
- 算数表达式:
(())
((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```
[email protected]:~# expr 1 + 1
2
[email protected]:~# expr 1 \* 1
1
[email protected]:~# expr index raojinlin r
1
[email protected]:~# expr substr raojinlin 3 4
ojin
[email protected]:~#
```
let
[email protected]:~# a=1 [email protected]:~# let a++ [email protected]:~# let a*=2 [email protected]:~# echo $a 4 [email protected]:~#
(())
# a 为上面let示例中的a变量,其值为2 [email protected]:~# echo $((a+1)) # shell将会解释a变量 5 [email protected]:~# echo $((a+1 * 2)) 6 [email protected]:~# echo $((a+1 * 2 / 2)) 5
[]
[email protected]:~# echo $[a+4] 8 [email protected]:~# echo $[23+4] 27 [email protected]:~# echo $[23 <=4] 0
原文地址:http://blog.51cto.com/jlnetc/2106096
时间: 2024-11-07 20:04:19