错误后执行脚本

错误后执行脚本

即使在特定步骤发生错误后,我也想继续执行 shell 脚本,但它在错误后被终止

if [ condition ];then
     cmd
else 
     cmd1
     return 4
fi

cmd2

我想要返回代码 4 并执行 cmd2,即使上面的步骤没有执行,但没有发生。整个代码都在一个函数内

答案1

函数返回 使用您指定的以下数字(或执行的上一个命令的返回代码)退出该函数,因此退出而不执行下一个命令(cmd2)是正常行为。如果您想执行命令 cmd2 但又想在函数末尾返回 4(因为您使用的是 cmd1 而不是 cmd),请使用一个标志,例如:

flag=0
if [ condition ];then
     cmd
else 
     cmd1
     flag=1
fi
cmd2
if [[ $flag -eq 1 ]]; then
     return 4
fi
return 0

但这似乎有点棘手,您应该考虑另一种方法来做到这一点(两个不同的函数?)

答案2

尽管 bash 有一个return语句,但您唯一能得到的就是函数的退出状态(0 到 255 之间的值)。所以return不是你想要的。

如果将return语句替换为echo,则可以捕获该值并进一步继续。

相反,你可以这样做:

#!/bin/bash
function master ()
{
    function check () 
    {
        if [ 1 == 2 ];then
            echo "Cmd1"
        else
            # Execute your command here
            echo 4
        fi
    }
    val=$(check)
    echo "Value: $val"
    echo "Done"
}
master

注意:我将您的整个代码放入一个master函数中(以与您当前的脚本一致)

相关内容