shell脚本中的错误处理,以阻止下一行的流程执行

时间:2014-03-25 10:37:31

标签: shell

我想在我的shell脚本上设置一个错误处理,我的脚本调用失败,错误,我应该能够停止执行和流程,不应该继续下一行。

在我的主脚本中,我正在调用以下脚本

sh /usr/oracle/StopServer.sh

如果此脚本因错误而失败,则不应执行此主文件上的下一个脚本..请帮助。

2 个答案:

答案 0 :(得分:1)

您可以检查命令执行的返回值,其中一种方法是:

sh /usr/oracle/StopServer.sh
if [ $? -ne 0 ]; then
    # exit or take action
fi

它应该做的伎俩

答案 1 :(得分:0)

你走了。

sh /usr/oracle/StopServer.sh && sh my_next_line_that_only_happens_if_Stop_server_exits_without_error

有关详细信息,请参阅&& bash(和大多数语言)中的运算符展示McCarthy evaluation,它基本上只是对布尔条件的惰性求值。这意味着对于an和(&&)然后只有第一部分为真时才会评估和表达式的第二项(因为否则结果会被假设为假。同样如果我们做了A ||只有当A为假时才会执行B(或)B,这意味着它返回的退出代码为0,因此失败。如果你有一个程序要执行,如果程序正常退出而另一个程序要执行如果它以失败状态退出(我将调用它们正常并失败),那么你可以像这样执行它们:

sh condition.sh && sh normal.sh || sh fail.sh

编辑:

if [ sh condition.sh ]; then
  # do whatever
else
 #this is what to do if it failed
fi

编辑#2:

如果你想看看会发生什么,试试这个:

if [ ls -badoption ] ; then
echo "passed "
else
echo "failed"
fi
# result follows
# zsh: parse error: condition expected: ls
# failed

它将失败,因为有一个错误的选项并且将运行失败,如果您刚刚放置ls它将回传传递,这是您可以退出或运行脚本的位置,具体取决于您采取的路径。