LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 390|回复: 0

Shell脚本深入教程:Bash支持的运算操作

[复制链接]
发表于 2023-12-13 15:10:38 | 显示全部楼层 |阅读模式

Bash支持的运算操作
id++ id-- ++id --id
自增、自减

- +
一元运算符,即正负号

! ~
逻辑取反、位取反

**
幂运算

* / %
乘法、除法、取模

+ -
加法、减法

<< >>
位左移、位右移

&
按位与运算

^
按位异或运算

|
按位或运算

<= >= < >
大小比较

== !=
等值比较

&&
逻辑与

||
逻辑或

expr ? expr : expr
三目条件运算

= *= /= %= += -= <<= >>= &= ^= |=
各种赋值语句

expr1 , expr2
多个表达式,例如$((x+=1,y+=3,z+=4))
几个注意事项:

空变量或未定义变量或字符串变量参与数值运算时,都当作数值0
变量替换先于算术运算,所以既可以使用变量名var,也可使用变量引用$var,例如$[a+1]和$[$a+1]在结果上是等价的
算术表达式可以进行嵌套,先计算最内层。如$(( (6+4)/$[2+3] ))
0开头的表示八进制,0x或0X开头的表示十六进制,可使用base#N的方式指定N是多少进制的数。例如echo $[ 010 + 10 ]得到18、echo $[ 0x10 + 10 ]得到26,echo $[ 2#100 + 10 ]得到14。参见下面一个实际案例
由上面的运算符可看出,$[]、$(())以及let命令,既支持算术运算,还支持赋值、大小比较、等值比较。如a=3;echo $[a==3]
有时候从字符串中截取得到的数值是以0开头的,如果要让它参与运算,需要指定为十进制,否则会当作八进制。例如:

datetime1=`date +"%s.%N"`
nano_seconds1=${datetime1#*.}
sleep 1
datetime2=`date +"%s.%N"`
nano_seconds2=${datetime2#*.}

echo $[ 10#$nano_seconds2 - 10#$nano_seconds1 ]
文章链接: https://www.junmajinlong.com/shell/script_course/shell_op/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表