在错误时退出脚本

我正在构build一个具有如下function的Shell脚本:

 if jarsigner -verbose -keystore $keyst -keystore $pass $jar_file $kalias then echo $jar_file signed sucessfully else echo ERROR: Failed to sign $jar_file. Please recheck the variables fi ... 

显示错误信息后,我希望脚本的执行完成。 我怎么能做到这一点?

你在找exit吗?

这是最好的bash指南。 http://tldp.org/LDP/abs/html/

在上下文中:

 if jarsigner -verbose -keystore $keyst -keystore $pass $jar_file $kalias then echo $jar_file signed sucessfully else echo ERROR: Failed to sign $jar_file. Please recheck the variables 1>&2 exit 1 # terminate and indicate error fi ... 

如果将set -e放在脚本中,脚本中的任何命令都会失败(即任何命令返回非零状态),脚本将立即终止。 这不会让你写自己的消息,但通常失败的命令自己的消息就足够了。

这种方法的优点是它是自动的:你不会冒着忘记处理错误的情况。

通过条件testing状态的命令(例如, &&|| )不会终止脚本(否则条件将毫无意义)。 偶然的命令失败并不重要的一个习惯用法是command-that-may-fail || true command-that-may-fail || true 。 您也可以使用set +e将部分脚本的set -eclosures。

如果你想能够处理一个错误而不是盲目地退出,而不是使用set -e ,那么在ERR伪信号上使用一个trap

 #!/bin/bash f () { errcode=$? # save the exit code as the first thing done in the trap function echo "error $errorcode" echo "the command executing at the time of the error was" echo "$BASH_COMMAND" echo "on line ${BASH_LINENO[0]}" # do some error handling, cleanup, logging, notification # $BASH_COMMAND contains the command that was being executed at the time of the trap # ${BASH_LINENO[0]} contains the line number in the script of that command # exit the script or return to try again, etc. exit $errcode # or use some other value or do return instead } trap f ERR # do some stuff false # returns 1 so it triggers the trap # maybe do some other stuff 

其他陷阱可以设置为处理其他信号,包括通常的Unix信号加上其他Bash伪信号RETURNDEBUG

这是做到这一点的方法:

 #!/bin/sh abort() { echo >&2 ' *************** *** ABORTED *** *************** ' echo "An error occurred. Exiting..." >&2 exit 1 } trap 'abort' 0 set -e # Add your script below.... # If an error occurs, the abort() function will be called. #---------------------------------------------------------- # ===> Your script goes here # Done! trap : 0 echo >&2 ' ************ *** DONE *** ************ ' 

exit 1是你所需要的。 1是一个返回代码,所以你可以改变它,如果你想,比如1代表一个成功的运行, -1代表一个失败或类似的东西。