如何告诉脚本在其调用的脚本执行以特定条件结束时停止

And*_*ndy 0 bash if-statement

我有一个master.sh脚本调用其他2个脚本

#!/bin/bash
/home/script1
/home/script2
Run Code Online (Sandbox Code Playgroud)

script1具有以下条件:

if [ $len -lt 10 ]; then                       
echo "mask is not 10"                                    
exit                                               
fi 
Run Code Online (Sandbox Code Playgroud)

如果脚本一出现退出条件,如何告诉master.sh不要继续执行脚本2?换句话说,如果$ len不是10,则停止执行后续脚本

cho*_*oba 5

标准方法是在出错时以非零退出状态退出:

if (( len < 10 )) ; then
    echo Mask is not at least 10. >&2
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

然后,您只需检查退出代码:

/home/script1 && /home/script2
Run Code Online (Sandbox Code Playgroud)

如果有几件事可能出错并且你想对失败作出反应,你可以退出各种退出代码,并在父母用$?检查它们:

/home/script1
case $? in 
    0) /home/script2 ;;
    1) echo 'Fatal problem' ;;
    2) echo 'Missing file' ;;
    # etc.
esac
Run Code Online (Sandbox Code Playgroud)

对于非标准情况,我会捕获输出:

[[ $(/home/script1) == 'mask is not 10' ]] && exit
/home/script2
Run Code Online (Sandbox Code Playgroud)