2017-07-31 47 views
1

我正在编写shell脚本来安装我的应用程序。我的脚本中有更多的命令,例如复制,解压缩,移动,if等等。如果任何命令失败,我想知道错误。此外,我不想发送零以外的退出代码。脚本安装如何处理shell脚本中的错误

订单(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脚本不是来砸

+0

'$?'给你最后执行的命令的状态,我认为你可以使用它...例如 - test -x if [$? -ne 0]然后回显“文件不退出”退出0 fi – deepakl

+0

@karan - 如果我的解决方案已解决您的问题,请接受答案并投票表决! – JRG

回答

1

/*在特殊变量$您的最后一个命令存储的状态?您可以定义变量$?做出口var = $?在Linux shell脚本*/

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

请参阅我更新的问题。 – karan

+0

@karan,我更新了我的答案。合乎逻辑的是,如果任何一个状态不成功,最终的操作是不成功的。 –

+0

@karan,逻辑很简单,你必须否定所有的逻辑或。 –

1

异常处理可如果你有多个命令,那么你可以做

(command_one && command_two) || fallback_command 

这里fallback_command可以做如下

command || fallback_command 

echolog文件中的档案等等

我不知道您是否曾尝试将set -x放在脚本的顶部以查看详细的执行情况。

+0

请参阅我更新的问题。 – karan

+0

我的解决方案并不需要您检查每个命令的状态,但会方便您有一个回退命令,这样您就可以在屏幕上回显故障或成功或在日志文件中记录详细信息以供日后查看。 – JRG

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 

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

1

想在这里给我2分钱。从ERRORS.TXT运行你的shell这样

sh root-file.sh 2> 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:行:文件3:权限被拒绝

你可以随便去检查线路没有(这8)有问题。请参阅此go to line no. in vi

或者这也可以是自动的:从您的shell脚本的grep特定行。 grep line with has issue here is 。

head -8 test1.sh |tail -1

希望它帮助。