即使在特定步骤发生错误后,我也想继续执行 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
函数中(以与您当前的脚本一致)