shell脚本执行成功但输出有错误,如何确定错误并退出主脚本?

shell脚本执行成功但输出有错误,如何确定错误并退出主脚本?,shell,error-handling,Shell,Error Handling,我有一个主要剧本。在它里面,我调用了其他三个shell脚本,A、B和C。所有这些脚本都是成功的。退出代码都等于零。但是,当我查看第一个脚本的输出文件时,它包含一条错误消息。现在我想退出主脚本,而不是在出现输出错误的脚本之后继续运行其他脚本。有人能帮我吗?谢谢 即使第一个bash脚本中的某个命令导致错误,整个脚本也可能以退出代码0完成 您可以使用$检查脚本中任何单个命令的退出代码?变量此变量存储上一个命令的退出代码。这将允许您检查脚本中的错误。最简单的方法是将| | exit 1附加到引发错误的语

我有一个主要剧本。在它里面,我调用了其他三个shell脚本,A、B和C。所有这些脚本都是成功的。退出代码都等于零。但是,当我查看第一个脚本的输出文件时,它包含一条错误消息。现在我想退出主脚本,而不是在出现输出错误的脚本之后继续运行其他脚本。有人能帮我吗?谢谢

即使第一个bash脚本中的某个命令导致错误,整个脚本也可能以退出代码0完成


您可以使用$检查脚本中任何单个命令的退出代码?变量此变量存储上一个命令的退出代码。这将允许您检查脚本中的错误。

最简单的方法是将| | exit 1附加到引发错误的语句中。如果命令的退出代码为1,即错误,则会导致脚本退出。 因此,假设您有一个命令sqlscript,并且希望在sqlscript以非零退出代码退出时退出整个脚本,那么您可以这样做

sqlscript || exit 1
作为琐事,不需要出口1中的1。普通退出命令也将以最后执行的命令的退出状态退出。 如果sqlscript命令失败,则为false code=1。如果sqlscript命令成功,则退出代码为sqlscript的退出代码。在这种情况下,| |不会触发,退出命令也不会执行

我有一个主要剧本。在它里面,我调用其他三个shell脚本,A,B C.都很成功。退出代码都等于零。然而 当我查看第一个脚本的输出文件时,它是 包含一条错误消息。现在我想退出主脚本,而不是 在已输出的脚本之后继续运行其他脚本 错误

由于脚本A不返回错误退出代码,因此必须检查其输出。如果您有一个搜索字符串,可以清楚地识别错误消息,那么使用grep是非常容易的。g、 :

# this echo command simulates script A - it outputs "error" and exits with 0:
echo "contains an error message" >StoreKey_All.csv  # assumed this output file
grep error StoreKey_All.csv && exit 1               # exit if output has error
# continue with scripts B and C
echo B

我的第一个脚本仍然有一个退出代码0,尽管它产生了一个错误。下面是我的脚本的作用。我有一个shell脚本,它编写sql脚本并将其结果转储到csv文件中。尽管输出有错误,但脚本的退出代码自运行以来仍然为0。有什么方法可以捕获输出文件上的错误吗?@smflores07我不知道捕获错误的确切含义,但无论您选择如何处理错误,都可以通过检查$来检测错误?在任何容易出错的命令之后,在脚本中。如果前一行代码产生错误,那么$?将不是零。这就是我如何在bash中捕捉错误的方法。我不明白为什么这还不够。哦,我理解混乱!你会选择美元吗?在第一个脚本中,而不是在其他脚本中。你必须在失败的代码行之后立即检测错误,否则将没有容易访问的错误记录。你能看看下面我的下标吗/bin/bash FILE=/data/temp/Jollibee/TableauExtract/infle/MainJobs/LastExtractionDate.csv回送开始时间:日期;如果s=','read lastdate_suc do echo\vdelim | \trim SELECT*from factsales\g>/data/temp/Jollibee/TableauExtract/infle/MainJobs/test/ExtractStoreInc.sql/opt/Actian/Vectorwise/ingre/bin/sql-S jfcdw_Jollibee_是/data/temp/Jollibee/tableaueextract/infle/MainJobs/test/StoreKey_All.csvI想知道这是否有错误,如果有,主脚本将退出,但如果没有,进程将继续执行下一个下标。