如何处理shell脚本中的错误

时间:2017-07-31 07:47:54

标签: linux shell error-handling

我正在编写shell脚本来安装我的应用程序。我的脚本中有更多的命令,例如copy,unzip,move,if等等。如果任何命令失败,我想知道错误。另外,我不想发送零以外的退出代码。

脚本安装顺序(root-file.sh): -

./script-to-install-mongodb
./script-to-install-jdk8
./script-to-install-myapplicaiton

示例脚本文件: -

cp sourceDir destinationDir

unzip filename

if [ true] 
// success code
if

我想通过使用变量或任何消息来了解,如果我的任何脚本命令在root-file.sh中失败。

我不想编写代码来检查每个命令状态。有时cp或mv命令可能由于无效目录而失败。在脚本执行结束时,我想知道所有命令都已成功执行或错误吗?

有办法吗?

注意:我使用的是shell脚本而不是bash

4 个答案:

答案 0 :(得分:1)

/ *你的上一个命令的状态存储在特殊变量$?中,你可以为$定义变量吗?做导出var = $? * /

unzip filename
export unzipStatus=$?
./script1.sh
export script1Status=$?
if [ !["$unzipStatus" || "$script1Status"]]
     then                  
         echo "Everything successful!"       
     else
         echo "unsuccessful"
fi

答案 1 :(得分:1)

linux shell脚本中的异常处理可以按如下方式进行

command || fallback_command

如果您有多个命令,则可以执行

(command_one && command_two) || fallback_command

此处fallback_command可以是文件中的echolog详细信息。

我不知道您是否尝试将set -x置于脚本之上以查看详细执行情况。

答案 2 :(得分:1)

当你使用shell脚本来实现这一点时,没有太多的外部工具。那么默认的$?应该有所帮助。您可能希望检查脚本之间的检索值。代码如下所示:

./script_1
retval=$?
if $retval==0; then
  echo "script_1 successfully executed ..."
  continue
else; 
  echo "script_1 failed with error exit code !"
  break
fi
./script_2

Lemme知道这是否为您的方案添加了任何值。

答案 3 :(得分:1)

想在这里给我2美分。像这样运行你的shell

sh root-file.sh 2> errors.txt

来自errors.txt的grep模式

grep -e "root-file.sh: line" -e "script-to-install-mongodb.sh: line" -e "script-to-install-jdk8.sh: line" -e "script-to-install-myapplicaiton.sh: line" errors.txt

输出以上grep命令将显示其中包含错误的命令以及行号。假设输出为: -

  

test.sh:line 8 :file3:Permission denied

你可以去检查有问题的行号(这里是8号)。请参阅此go to line no. in vi

或者这也可以自动化: grep来自shell脚本的特定行。 grep行有问题,这里 8

head -8 test1.sh |tail -1

希望它有所帮助。