0

0

Linux循环怎么写_Shell循环教程

舞姬之光

舞姬之光

发布时间:2026-03-05 13:47:02

|

471人浏览过

|

来源于php中文网

原创

linux shell循环有for、while、until三种,最常用for和while;for适用于已知次数的遍历,while适用于条件为真时重复执行,until适用于条件为假时重复执行。

linux循环怎么写_shell循环教程

Linux Shell 中的循环主要有 forwhileuntil 三种,最常用的是 forwhile。写对循环关键在结构清晰、条件明确、避免死循环。

for 循环:遍历列表或范围

适合已知次数或明确要处理的项目(如文件、数字、字符串)。

Shell脚本编写基础 中文WORD版
Shell脚本编写基础 中文WORD版

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统

下载
  • 基本语法:
      for 变量 in 列表; do
        命令序列
      done
  • 常见用法举例:
    • 遍历当前目录下所有 .txt 文件:
      for file in *.txt; do echo "处理: $file"; done
    • 遍历数字 1 到 5:
      for i in {1..5}; do echo $i; done
    • 用 seq 命令生成范围(兼容老版本 Shell):
      for i in $(seq 1 2 10); do echo $i; done  # 输出 1 3 5 7 9

while 循环:条件为真时重复执行

适合不确定执行次数、依赖状态变化的场景(如等待文件出现、读取输入、监控进程)。

  • 基本语法:
      while [ 条件 ]; do
        命令序列
      done
  • 关键点:
    • 条件必须能被更新,否则会陷入死循环;
    • 常用测试命令:[ -f file ](文件存在)、[ $n -lt 10 ](数值比较)、ps | grep xxx(进程检查);
    • 示例:每秒检查 /tmp/ready 文件是否存在,最多等 30 秒:
      n=0
      while [ ! -f /tmp/ready ] && [ $n -lt 30 ]; do
        sleep 1
        n=$((n + 1))
      done

until 循环:条件为假时重复执行

逻辑和 while 相反,适合“直到某事发生才停止”的情况,语义更直接。

  • 基本语法:
      until [ 条件 ]; do
        命令序列
      done
  • 上面的等待示例改用 until 更简洁:
      n=0
      until [ -f /tmp/ready ] || [ $n -eq 30 ]; do
        sleep 1
        n=$((n + 1))
      done

    (意思是:直到文件存在 或 超过 30 秒,就退出循环)

实用技巧与避坑提醒

  • 循环体内修改变量时,注意作用域:Shell 中 for/while 内部变量默认全局有效,无需额外声明;
  • break 提前退出循环,continue 跳过本次剩余操作、进入下一次;
  • 调试时加 echo 打印变量值,比如 echo "当前 i=$i"
  • 避免空列表导致 for 循环不执行(如 for f in $(ls *.log 2>/dev/null); do ...),可用 shopt -s nullglob 或先判断通配结果;
  • while 读文件建议用重定向而非管道,防止子 shell 导致变量失效:
      while IFS= read -r line; do
        echo "$line"
      done (✅ 正确)
      cat input.txt | while read line; do ... done(❌ 变量在子 shell 中,外部不可见)

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

252

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1008

2024.03.01

while的用法
while的用法

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

104

2023.09.25

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

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

120

2025.10.15

java break和continue
java break和continue

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

261

2025.10.24

java break和continue
java break和continue

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

261

2025.10.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

718

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

2

2026.03.05

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.2万人学习

Git 教程
Git 教程

共21课时 | 4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号