当前位置: 首页 > news >正文

SHELL笔记(循环)

在 Shell 编程中,循环结构是极为重要的一部分,它能够让我们轻松地重复执行特定的代码块,从而高效地处理各种重复性任务。本文将详细介绍 Shell 中常见的循环结构,包括 for 循环、while 循环和 until 循环,并通过具体的例子展示它们的用法和应用场景。

一、for 循环

for 循环通常用于遍历一个列表中的元素,这个列表可以是一组数字、字符串或者文件名等。其基本语法如下:

for 变量 in 列表
do# 循环体,执行的代码
done

例如,我们要打印从 1 到 5 的数字:

for i in 1 2 3 4 5
doecho $i
done

在这个例子中,i 是循环变量,它依次取列表 1 2 3 4 5 中的每个值,然后在循环体中打印出来。每次循环,i 的值都会发生变化,直到遍历完整个列表。

for 循环还常用于遍历文件列表。假设我们有一个目录下有多个 .txt 文件,我们要打印出每个文件的名称:

for file in *.txt
doecho $file
done

这里,file 变量会依次取当前目录下所有 .txt 文件的文件名,然后在循环体中输出。

二、while 循环

while循环会在条件为真时持续执行循环体中的代码。其语法结构为:

while 条件
do# 循环体
done

例如,我们来实现一个简单的计数器,从 1 开始计数,直到达到 10:

count=1
while [ $count -le 10 ]
doecho $countcount=$((count + 1))
done

在这个例子中,[ $count -le 10 ] 是条件判断,只要 count 的值小于等于 10,循环就会继续执行。在循环体中,先打印当前 count 的值,然后将 count 的值加 1。

while 循环还可以用于读取文件内容。假设我们有一个文本文件 data.txt,每行包含一个数字,我们要计算这些数字的总和:

total=0
while read line
dototal=$((total + line))
done < data.txt
echo "总和为: $total"

这里,read line 用于从文件 data.txt 中读取一行内容到变量 line 中,只要能成功读取到内容(即文件未读完),循环就会继续执行,在循环体中计算总和。

三、until 循环

until 循环与 while 循环相反,它会在条件为假时执行循环体,直到条件变为真。语法如下:

until 条件
do# 循环体
done

例如,我们再次实现计数器从 1 开始计数,直到达到 10,但使用 until 循环:

count=1
until [ $count -gt 10 ]
doecho $countcount=$((count + 1))
done

在这个例子中,[ $count -gt 10 ] 是条件判断,只要 count 的值不大于 10,循环就会继续执行,即当 count 大于 10 时循环停止。

四、循环控制语句

在循环中,我们还可以使用一些控制语句来改变循环的执行流程。

  • break 语句:用于立即终止循环,跳出循环体。例如:
for i in 1 2 3 4 5
doif [ $i -eq 3 ]; thenbreakfiecho $i
done

在这个 for 循环中,当 i 的值等于 3 时,break 语句被执行,循环立即终止,所以只会打印出 1 和 2。

  • continue 语句:用于跳过当前循环的剩余部分,直接进入下一次循环。例如:
for i in 1 2 3 4 5
doif [ $i -eq 3 ]; thencontinuefiecho $i
done

当 i 的值等于 3 时,continue 语句被执行,跳过本次循环中 echo $i 的操作,直接进入下一次循环,所以会打印出 1、2、4、5。

通过合理运用这些循环结构和控制语句,我们能够在 Shell 编程中灵活地处理各种重复任务,提高工作效率和代码的简洁性与可读性。无论是处理文件、管理系统任务还是进行数据计算,Shell 循环都能发挥重要的作用。

http://www.lryc.cn/news/490578.html

相关文章:

  • SpringBoot多文件上传
  • MyBatis-数据库连接池、属性文件config.properties、类名简化、MyBatis的整体架构
  • Flink-Source的使用
  • C0031.在Clion中使用mingw编译器来编译opencv的配置方法
  • Android——连接MySQL(Java版)
  • 「四」体验HarmonyOS端云一体化开发模板——工程目录结构与云侧工程一键部署AGC云端
  • Kotlin:后端开发的新宠
  • SSM全家桶 1.Maven
  • SpringBoot 集成 html2Pdf
  • 利用 Watchtower 自动监听并更新正在运行的 Docker 容器
  • Nodejs开发仿马蜂窝旅游小程序API接口,服务器端开发,商家后台 Vue3+微信小程序+koa+mongodb+node.js
  • 极限失控的大模型使电力系统面临的跨域攻击风险及应对措施
  • mybatis-plus方法无效且字段映射失败错误排查
  • librdns一个开源DNS解析库
  • Unity3D 逻辑服的Entity, ComponentData与System划分详解
  • 跟《经济学人》学英文:2024年11月23日这期 Why British MPs should vote for assisted dying
  • 基于阿里云服务器部署静态的website
  • 【2024 Optimal Control 16-745】Ubuntu22.04 安装Julia
  • nuget默认包管理格式:packages.config、packageReference区别
  • element-plus教程:Input Number 数字输入框
  • M|横道世之介
  • 借助算力云跑模型
  • LlamaIndex+本地部署InternLM实践
  • 3.12MayBeSomeJava
  • 设计模式之 命令模式
  • 24.11.23 Ajax
  • Sickos1.1 详细靶机思路 实操笔记
  • rk3568-linux-5.10.160移植rtl8822cs wifi 模块纪要
  • QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
  • 学习electron