bash获取命令结果

bash中获取命令结果可以用$?

经常有需求将多个命令封装到一个shell中,并需要在遇到命令失败时就退出,并不执行下一个命令。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
command1
if [[ $? -ne 0 ]]; then
exit 1
fi

command2
if [[ $? -ne 0 ]]; then
exit 1
fi

其他特殊变量如下

变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(“ “)包含时,与 $* 稍有不同
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

有时,makefile也有如此需求,可以写类似代码,不过makefile引用shell变量时,需要多加个$

1
2
3
run:
command1 || exit "$$?"; \
command2 || exit "$$?"; \