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

Linux Shell有多少种循环类型,该如何选择合适的循环使用?

Linux Shell循环语法选择指南

选择循环类型的核心是匹配你的使用场景,避免踩语法隐含的坑,不同场景的选型规则如下:

  • 逐行读取文件/输入流:优先用while read -r
    这是最稳妥的逐行读取方案,不会因为行内存在空格、特殊字符拆分内容,-r参数用于避免自动转义行内的反斜杠字符。
    正确示例:
while read -r line; do
  echo "$line"
done < input.file

避坑提示:绝对不要用示例中的for line in cat a.txt``写法,这种写法存在两个问题:一是语法错误,循环结尾应该写done而非while;二是会默认按IFS(内部字段分隔符)拆分内容,行内存在空格、制表符时会把一行拆成多个循环项,大文件场景下性能也极差,仅适合遍历没有特殊分隔符的短列表。

  • 遍历指定列表/通配符匹配结果:用for in循环
    适合遍历已知的离散值,比如文件名、脚本参数、固定字符串列表:
# 遍历当前目录所有txt文件
for file in *.txt; do
  echo "处理文件:$file"
done

# 遍历脚本传入的参数
for arg in "$@"; do
  echo "传入参数:$arg"
done
  • 固定次数循环/需要数值计数:优先用C风格for循环
    如果需要控制循环次数、对计数变量做运算,用C风格的for(())写法最直观:
# 循环10次
for ((i=1; i<=10; i++)); do
  echo "当前是第 $i 次循环"
done

如果是简单的固定次数场景,也可以用大括号扩展简化写法:

for i in {1..10}; do
  echo "当前是第 $i 次循环"
done
  • 循环直到满足条件才终止:用until循环
    和while逻辑相反,while是条件为真时持续循环,until是条件为假时持续循环,直到条件为真就退出,适合等待某个状态就绪的场景:
# 等待nginx进程启动
until pgrep nginx > /dev/null 2>&1; do
  echo "等待nginx启动..."
  sleep 1
done
echo "nginx已启动"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:06:03