我有一个Bash shell脚本,它调用许多命令。
如果任何命令返回非零值,我想让shell脚本自动退出并返回值为1。
如果不显式地检查每个命令的结果,这可能吗?
例如,
dosomething1
if [[ $? -ne 0 ]]; then
exit 1
fi
dosomething2
if [[ $? -ne 0 ]]; then
exit 1
fi
我有一个Bash shell脚本,它调用许多命令。
如果任何命令返回非零值,我想让shell脚本自动退出并返回值为1。
如果不显式地检查每个命令的结果,这可能吗?
例如,
dosomething1
if [[ $? -ne 0 ]]; then
exit 1
fi
dosomething2
if [[ $? -ne 0 ]]; then
exit 1
fi
当前回答
#!/bin/bash -e
应该足够了。
其他回答
如果出现错误,下面的脚本将打印一个红色错误消息并退出。 把这个放在你的bash脚本的顶部:
# BASH error handling:
# exit on command failure
set -e
# keep track of the last executed command
trap 'LAST_COMMAND=$CURRENT_COMMAND; CURRENT_COMMAND=$BASH_COMMAND' DEBUG
# on error: print the failed command
trap 'ERROR_CODE=$?; FAILED_COMMAND=$LAST_COMMAND; tput setaf 1; echo "ERROR: command \"$FAILED_COMMAND\" failed with exit code $ERROR_CODE"; put sgr0;' ERR INT TERM
运行时带-e或者在顶部设置-e。
再看看set -u。
像这样的表达式
dosomething1 && dosomething2 && dosomething3
当其中一个命令返回非零值时将停止处理。例如,下面的命令永远不会打印"done":
cat nosuchfile && echo "done"
echo $?
1
美元吗?很少需要变量。伪成语命令;如果[$?-eq 0];那么X;Fi应该总是写成command;那么X;fi。
$?Is required是指需要检查多个值:
command
case $? in
(0) X;;
(1) Y;;
(2) Z;;
esac
或者什么时候$?需要重用或以其他方式操作:
if command; then
echo "command successful" >&2
else
ret=$?
echo "command failed with exit code $ret" >&2
exit $ret
fi
我只是抛出了另一个参考,因为马克埃德加斯输入了一个额外的问题,这里是一个额外的例子,涉及到整个主题:
[[ `cmd` ]] && echo success_else_silence
这与有人显示的cmd || exit errcode相同。
例如,如果挂载了分区,我想确保分区是卸载的:
[[ `mount | grep /dev/sda1` ]] && umount /dev/sda1