Linux如何使用Shell循环for while_Linux Shell循环for while步骤

胖涛吖_6275

胖涛吖_6275

2026-04-07

794人浏览

原创

列表已知用for,条件动态用while;for易因空格、通配符失效,while读文件须用ifs= read -r,嵌套需防变量覆盖与重定向遗漏。

linux如何使用shell循环for while_linux shell循环for while步骤

Shell里选 for 还是 while,不看教程标题,只看你的数据来源和退出条件:列表已知就用 for,条件动态就用 while。硬套语法反而容易出错。

for 循环处理固定列表时,空格和通配符是最大陷阱

for 的本质是把 in 后面的内容按 $IFS(默认空格、制表符、换行)切开,每一段赋给变量。它不解析路径、不检查文件是否存在。

  • 写 for file in *.txt 时,如果当前目录没有 .txt 文件,file 的值就是字面量 *.txt,不是空 —— 这常导致后续 cat *.txt 报错“no such file”
  • 文件名含空格?for f in $(ls) 会把 my photo.jpg 拆成 my 和 photo.jpg 两个迭代项 —— 改用 for f in *.jpg 或 find ... -print0 | while IFS= read -r -d '' f
  • for i in {1..10} 是 Bash 特性,/bin/sh 不支持;需要兼容时改用 for i in $(seq 1 10)

while 循环读文件必须加 IFS= read -r 才可靠

直接 while read line 看似简单,但会吃掉行首空格、把反斜杠当续行符、把末尾的 \ 和空格自动裁掉 —— 这在处理配置文件或日志时几乎必然出错。

  • 正确写法永远是:while IFS= read -r line; do ...; done
  • 如果 read 要从管道来(比如 ps aux | while read ...),注意管道会创建子 shell,循环体内对变量的修改在循环外不可见 —— 改用重定向或 while ... done
  • while [ $i -lt 10 ] 这类计数循环,别忘了在循环体里更新 i,否则就是真·死循环

for 和 while 嵌套时,变量作用域和重定向容易串场

嵌套本身没语法问题,但实际脚本里常因重定向位置或变量复用导致行为偏离预期。

  • 外层 for dir in /var/log /tmp/logs,内层 while read f; do echo "$f"; done —— 如果某个目录下没有 <code>access.log,while 会直接失败退出,整个 for 循环也就停了。加 || true 或先 [ -f "$dir/access.log" ] && 判断更稳
  • 嵌套中重复使用 i、line 这类通用变量名,外层还没结束,内层就把值改掉了 —— 显式命名如 log_dir、log_line 可避免干扰
  • for i in {1..3}; do while sleep 1; do echo $i; break; done; done —— 这里 break 只跳出 while,for 仍继续;要同时跳出两层,得用 break 2

真正麻烦的从来不是语法记不住,而是 for 遇到空目录、while 读到带空格的路径、嵌套时重定向漏写 —— 这些细节不验证,脚本上线后才暴露,比逻辑错误更难定位。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.25

334

5

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

2025.10.15

2540

7

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

2025.10.24

727

6

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3950

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3393

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2553

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6150

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5802

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3393

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习