ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[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 ```