continue用于跳过当前循环迭代并进入下一次,适用于for、while、until;在while中需手动更新变量防死循环;支持continue N跳出N层嵌套循环。

在 Linux Shell 脚本中,continue 用于跳过当前循环迭代,直接进入下一次循环,常配合 for、while 或 until 使用。它不会终止整个循环,只跳过本次执行的剩余语句。
for 循环中使用 continue
当满足某个条件时,跳过当前项,继续处理下一个元素:
for i in 1 2 3 4 5; do
if [ $i -eq 3 ]; then
continue
fi
echo "当前数字: $i"
done
输出为:
当前数字: 1
当前数字: 2
当前数字: 4
当前数字: 5
数字 3 被跳过,但循环继续执行后续值。
while 循环中使用 continue
注意:在 while 中用 continue 时,必须确保循环变量仍会更新,否则可能陷入死循环:
i=1
while [ $i -le 5 ]; do
if [ $i -eq 3 ]; then
i=$((i + 1)) # 先更新,再跳过
continue
fi
echo "当前值: $i"
i=$((i + 1))
done
关键点:
• continue 前必须手动递增(或改变)控制变量;
• 如果漏掉 i=$((i + 1)),i 保持为 3,条件恒真,导致无限循环。
结合命令失败跳过当前迭代
常见场景:遍历文件列表,跳过无法读取的文件:
for file in *.log; do
[ -f "$file" ] || continue # 跳过非普通文件(如通配符未匹配时的字面量 *.log)
[ -r "$file" ] || { echo "跳过无读取权限: $file"; continue; }
echo "正在处理: $file"
# 这里加实际处理逻辑,比如 grep 或 gzip
done
说明:
• 第一个 continue 防止空匹配干扰;
• 第二个用命令分组 { ...; continue; } 实现条件跳过;
• 每次跳过都只影响当前 $file,不影响其余文件。
continue 后可带数字(仅 Bash)
Bash 支持 continue N,表示跳出第 N 层嵌套循环(默认 N=1):
for i in 1 2; do
echo "外层: $i"
for j in a b c; do
echo " 内层: $j"
[ "$j" = "b" ] && continue 2 # 直接跳到外层下一轮
done
done
输出:
外层: 1
内层: a
内层: b
外层: 2
内层: a
内层: b
遇到 b 就跳出内层并终止当前外层迭代,进入 i=2。


















