Linux Shell中for、while、until是三种基本循环结构:for适用于已知范围的批量操作,while用于条件为真时持续执行,until则在条件为假时执行直至满足退出条件,配合break和continue可精准控制流程。

Linux Shell 中的循环结构是自动化批量操作的核心工具。掌握 for、while、until 三种基本类型,再配合 break、continue 等控制语句,就能高效处理文件、用户、日志、监控等日常运维任务。
for 循环:适合已知范围的批量操作
当目标明确、次数固定或列表清晰时,优先用 for。它天然适合遍历文件、数字序列、数组或命令输出结果。
- 批量重命名:
for file in *.log; do mv "$file" "backup_${file}"; done - 创建 10 个测试目录:
for i in {1..10}; do mkdir -p test_$i; done - 从文件读取用户名并建户:
for u in $(cat users.txt); do useradd "$u"; echo "$u created"; done - 倒序打印 5 到 1:
for ((i=5; i>=1; i--)); do echo $i; done
while 循环:适合条件驱动的持续执行
当无法预知执行次数,但知道“什么时候该停”时,用 while。它靠判断表达式真假决定是否继续,常用于读文件、轮询状态、交互输入等场景。
- 逐行读取配置文件:
while IFS= read -r line; do echo "Processing: $line"; done - 等待某个进程启动(每秒检查一次):
while ! pgrep nginx > /dev/null; do sleep 1; done; echo "nginx is up" - 简易计数器(1–5):
i=1; while [ $i -le 5 ]; do echo $i; i=$((i+1)); done
until 循环:适合“直到满足才退出”的逻辑
until 和 while 行为相反:它在条件为假时执行,条件为真时退出。语义更贴近“等待某事发生”,可让脚本逻辑更直观。
- 等待端口监听(如 8080):
until nc -z localhost 8080; do echo "waiting..."; sleep 2; done - 提示用户输入,直到输入 quit:
until [[ "$input" == "quit" ]]; do read -p "Enter command (or quit): " input; done
break 与 continue:精准控制循环流程
它们不改变循环类型,而是优化执行路径,避免冗余操作。
-
break:立即跳出整个循环。例如查找第一个含“error”的日志行后终止:
for f in *.log; do if grep -q "error" "$f"; then echo "found in $f"; break; fi; done -
continue:跳过当前迭代,进入下一轮。例如跳过空文件处理:
for f in *; do [ ! -s "$f" ] && continue; echo "processing $f"; done










