假设shell脚本(/ bin / sh或/ bin / bash)包含多个命令。如果任何命令的退出状态失败,如何干净地使脚本终止?显然,可以使用if块和/或回调,但是有更清晰,更简洁的方法吗?使用&&也不是一个真正的选择,因为命令可能很长,或者脚本可能有很多非常重要的东西,比如循环和条件。
答案 0 :(得分:60)
使用标准sh
和bash
,您可以
set -e
它会
$ help set
...
-e Exit immediately if a command exits with a non-zero status.
它也适用于(我可以收集的)zsh
。它也适用于任何Bourne shell后代。
使用csh
/ tcsh
,您必须使用#!/bin/csh -e
启动脚本
答案 1 :(得分:16)
可能你可以使用:
$ <any_command> || exit 1
答案 2 :(得分:1)
你可以检查$?看看最新的退出代码是什么..
e.g
#!/bin/sh
# A Tidier approach
check_errs()
{
# Function. Parameter 1 is the return code
# Para. 2 is text to display on failure.
if [ "${1}" -ne "0" ]; then
echo "ERROR # ${1} : ${2}"
# as a bonus, make our script exit with the right error code.
exit ${1}
fi
}
### main script starts here ###
grep "^${1}:" /etc/passwd > /dev/null 2>&1
check_errs $? "User ${1} not found in /etc/passwd"
USERNAME=`grep "^${1}:" /etc/passwd|cut -d":" -f1`
check_errs $? "Cut returned an error"
echo "USERNAME: $USERNAME"
check_errs $? "echo returned an error - very strange!"