人人都会AI编程

break、continue、exit 循环控制

更新时间:2026-07-12

在 Shell 脚本的 forwhileuntil 循环中,有时不需要执行完所有迭代,而是要提前终止循环,或者跳过当前这一次循环直接进入下一次。Shell 为此提供了 breakcontinue 两个内建命令。此外,exit 则是用来直接退出整个脚本。它们在日常脚本中非常实用,下面逐个说明。

1. break:立即跳出循环
当某个条件满足时,使用 break 可以直接终止当前所在的整个循环,不再执行剩余的任何迭代。常用来实现“找到了就停”的逻辑。

# 在 1~10 中查找第一个能被 3 和 5 同时整除的数
for i in $(seq 1 10); do
    if [ $((i % 3)) -eq 0 ] && [ $((i % 5)) -eq 0 ]; then
        echo "找到了: $i"
        break       # 找到后就退出循环,不再检查后面的数
    fi
done

如果有多层循环嵌套,break 默认只跳出最内层循环。可以使用 break N 指定跳出几层,例如 break 2 会跳出两层循环。

2. continue:跳过本次迭代,进入下一次循环
continue 用来结束当前这一次循环的执行,直接回到循环开始进行下一轮判断和迭代。常用于忽略某些不需要处理的情况。

# 打印 1~10 中的所有偶数
for i in $(seq 1 10); do
    if [ $((i % 2)) -ne 0 ]; then
        continue    # 奇数就跳过,不执行后面的 echo
    fi
    echo "$i 是偶数"
done

break 类似,continue 也可以带层数参数 continue N,在多级嵌套中从多层循环内直接跳到外层循环的下一次迭代。

3. exit:立即退出整个脚本
exit 并不局限于循环内部,它可以出现在脚本的任何位置。执行时,脚本立即终止,并可以返回一个退出状态码(默认是 0 表示成功,非零表示异常)。在循环中碰到致命错误需要提前结束整个脚本时,可以使用 exit

# 检查日志文件是否存在,不存在则退出脚本
if [ ! -f "/var/log/app.log" ]; then
    echo "错误: 日志文件不存在"
    exit 1
fi

for line in $(cat /var/log/app.log); do
    if [ "$line" = "FATAL" ]; then
        echo "发现致命错误,脚本中止"
        exit 2         # 立即停止脚本,退出码为2
    fi
done

4. 实践中的区别与应用场景

  • 当你需要提前结束整个循环(例如搜索到目标后不再继续),用 break
  • 当你需要跳过某一次循环中的剩余代码,但还要继续执行后面的循环,用 continue
  • 当你遇到无法继续执行整个脚本的错误条件,无论当前是否在循环中,都用 exit

这三个命令配合循环和条件判断,让 Shell 脚本能够写出清晰、高效的控制流程。特别是在处理大量文件、日志分析或执行任务轮询时,合理运用它们可以大大减少不必要的处理,提升脚本的健壮性和执行效率。