You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何需在Shell脚本else分支中添加exit 1?附示例验证

在Bash脚本的每个else分支添加exit 1的实现

Hey there! 看你正在学习Bash的控制流指令,并且需要给每个else分支都加上exit 1来保证非预期路径执行后返回错误状态码。先看看你提供的示例脚本:

#! ~/bin/bash
min_val=1
max_val=100
int=50
if [[ "$int" =~ ^-?[0-9]+$ ]]; then
    if [[ "$int" -ge "$min_val" && "$int" -le "$max_val" ]]; then
        echo "$int is within $min_val to $max_val."
    else
        echo "$int is out of range."
    fi
else
    echo "int is not an integer." >&2
    exit 1 # here,
fi

目前这个脚本只有最外层的else分支添加了exit 1,内层判断数值范围的else还没处理。按照你的要求,我们需要给每一个else分支都加上exit 1,同时为了规范,把错误信息都重定向到标准错误流(>&2),修改后的完整脚本如下:

#! ~/bin/bash
min_val=1
max_val=100
int=50
if [[ "$int" =~ ^-?[0-9]+$ ]]; then
    if [[ "$int" -ge "$min_val" && "$int" -le "$max_val" ]]; then
        echo "$int is within $min_val to $max_val."
    else
        echo "$int is out of range." >&2
        exit 1
    fi
else
    echo "int is not an integer." >&2
    exit 1
fi

接下来测试不同场景的执行效果:

  • 场景1:整数在有效范围内
$ bash test_integer2.sh
50 is within 1 to 100.
$ echo $?
0

正常执行,返回成功状态码0。

  • 场景2:整数超出范围
$ int=101 bash test_integer2.sh
101 is out of range.
$ echo $?
1

触发内层else,返回错误状态码1。

  • 场景3:输入不是整数
$ int=abc bash test_integer2.sh
int is not an integer.
$ echo $?
1

触发外层else,同样返回错误状态码1。

这样所有非预期的分支都会以exit 1退出,你可以通过echo $?轻松判断脚本是否执行符合预期。

内容的提问来源于stack exchange,提问作者Wizard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:37:36