算术运算
最后更新于:2022-04-02 03:53:17
[TOC]
## 算术表达式
只能算整数
```
(( ... ))
[...] //不建议使用
+:加法
-:减法
*:乘法
/:除法(整除)
%:余数
**:指数
++:自增运算(前缀或后缀)
--:自减运算(前缀或后缀)
```
括号中的不为0 ,则运算正确,通过$?进行判断
```
$ (( 2+2 ))
$?
0
```
在 括号前加入 $ 可获得返回值
```
$ echo $((2 + 2))
4
```
括号中的值被看作变量,若变量名不存在,则变量值为0
```
$ number=2
$ echo $(($number + 1))
// or
$ echo $((number + 1))
3
```
## 数值的进制
```
number:没有任何特殊表示法的数字是十进制数(以10为底)。
0number:八进制数。
0xnumber:十六进制数。
base#number:base进制的数。
```
```
$ echo $((0xff))
255
$ echo $((2#11111111))
255
$ echo $((10#255))
255
```
## 位运算
```
$((...))支持以下的二进制位运算符。
<<:位左移运算,把一个数字的所有位向左移动指定的位。
>>:位右移运算,把一个数字的所有位向右移动指定的位。
&:位的“与”运算,对两个数字的所有位执行一个AND操作。
|:位的“或”运算,对两个数字的所有位执行一个OR操作。
~:位的“否”运算,对一个数字的所有位取反。
^:位的异或运算(exclusive or),对两个数字的所有位执行一个异或操作。
```
```
$ echo $((16>>2))
4
$ echo $((16<<2))
64
```
## 逻辑运算
如果逻辑表达式为真,返回`1`,否则返回`0`
```
$((...))
<:小于
>:大于
<=:小于或相等
>=:大于或相等
==:相等
!=:不相等
&&:逻辑与
||:逻辑或
!:逻辑否
expr1?expr2:expr3:三元条件运算符。若表达式expr1的计算结果为非零值(算术真),则执行表达式expr2,否则执行表达式expr3。
```
```
$ echo $((3 > 2))
1
$ echo $(( (3 > 2) || (4 <= 1) ))
1
$ echo $((a<1 ? 1 : 0))
1
```
## 赋值运算
`$((...))`可以执行赋值运算
```
parameter = value:简单赋值。
parameter += value:等价于parameter = parameter + value。
parameter -= value:等价于parameter = parameter – value。
parameter *= value:等价于parameter = parameter * value。
parameter /= value:等价于parameter = parameter / value。
parameter %= value:等价于parameter = parameter % value。
parameter <<= value:等价于parameter = parameter << value。
parameter >>= value:等价于parameter = parameter >> value。
parameter &= value:等价于parameter = parameter & value。
parameter |= value:等价于parameter = parameter | value。
parameter ^= value:等价于parameter = parameter ^ value。
```
对a进行复制,并返回赋值的值
```
echo $((a=123))
123
$ foo=5
$ echo $((foo*=2))
10
```
## expr 命令
```
$ expr 3 + 2
5
$ foo=3
$ expr $foo + 2
5
$ expr 3.5 + 2
expr: 非整数参数
```
## if 判断
```
if (( a < b )); then
…
fi
```
';