为何需在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
相关产品推荐
相关产品推荐

