Bash 运算符与命令连接符
Bash 中的算术运算、条件判断和命令连接符属于不同语法,含义不能混用。
整数算术
(( ... )) 和算术展开 $(( ... )) 支持整数运算:
| 运算符 | 作用 |
|---|---|
+、-、*、/ | 加、减、乘、除 |
% | 取余 |
** | 乘方 |
++、-- | 自增、自减 |
+=、-=、*=、/=、%= | 复合赋值 |
==、!=、<、<=、>、>= | 数值比较 |
&&、||、! | 逻辑与、逻辑或、逻辑非 |
&、|、^、~ | 按位与、按位或、按位异或、按位取反 |
left=5
right=6
sum=$(( left + right ))
(( left += 2 ))
printf 'sum=%d, left=%d\n' "$sum" "$left"Bash 算术默认使用整数,5 / 2 的结果是 2。除数为零会产生错误。
命令连接符
命令连接符根据命令的退出状态控制执行流程:
# 前一个命令成功才执行后一个
prepare && run_job
# 前一个命令失败才执行后一个
run_job || echo "执行失败" >&2
# 顺序执行,不关心前一个命令是否成功
first_command; second_command
# 反转命令的退出状态
if ! check_status; then
echo "检查未通过" >&2
fi管道与后台执行
在普通命令语法中,| 和 & 不是逻辑运算符:
# 将前一个命令的标准输出连接到后一个命令
producer | consumer
# 在后台启动命令
long_running_command &需要检测管道中上游命令的失败时,可以使用 set -o pipefail。