shell的for循环

列表for循环

  1. 列表for循环的语法结构如下:
for variablein list	#每一次循环,依次把列表list 中的一个值赋给循环变量
do					#循环体开始的标志commands		#循环变量每取一次值,循环体就执行一遍commands
done				#循环结束的标志,返回循环顶部

列表 list 可以是命令替换、变量名替换、字符串和文件名列表(可包含通配符),每列表项以空格间隔。
for 循环执行的次数取决于列表 list 中单词的个数,可以省略in list,省略时相当于in"$@"。

  1. 例1:
#!/bin/bash
##filename:for1.sh
for x in centos ubuntu windows max
doecho "$x"
done

将字符串列表作为list,list包含centos ubuntu windows max,字符串以空格分割,for循环会把list列表依次输出
在这里插入图片描述

  1. 例子2,列表中包含"centos ubuntu" "windows 7 10"带空格的列表项,必须要用双引号括起来作为一个整体。
#!/bin/bash
##filename:for2.sh
for x in linux "centos ubuntu" windows "windows 7 10"
doecho "$x" ;
done

在这里插入图片描述
4. 例3,”== ls ==“是echo "$x"的输出结果,而40k这种信息是eval $x的输出结果(eval会将 $x 替换为没命令),然后执行命令,输出结果

#!/bin/bash
#filename:for3.sh
for x in ls "df -h" "du -sh"
doecho "==$x==" ; eval $x
done

在这里插入图片描述
5. 列表for循环执行流程:
首先将list的item1 赋给 variable,然后执行 do和done 之间的命令接着再将 list的item2赋给 variable,继续执行 do和done 之间的命令,如此循环,直到 list中的所有item值都已经用完才退出循环
在这里插入图片描述

不带列表for循环

  1. 不带列表的for循环执行是由用户指定参数和参数的个数,不带列表的for循环的基本格式:
不带列表的for循环的基本格式:
for	variabledocommandcommand..done

其中 do和done之间的命令称为循环体,shell 会自动地将命令行输入的所有参数依次组织成列表,每次将一个命令行输入的参数显示给用户,直至所有的命令行中的参数都显示给用户。

  1. 例子1,所有输入的内容,都是通过脚本参数传递进去的,所以说,不带列表的 for循环其实是使用位置参数变量 "$ @"来传递 for 中的 list列表,其实相当于for 循环省略了in$@关键字。
#!/bin/bash
#filename:for4.sh
i=1
for day ; doecho -n "positional parameter $((i++)): $day "case $day in[Mm]on|[Tt]ue|[Ww]ed|[Tt]hu|[Ff]ri)echo " (weekday)";;[Ss]at[Ss]un)echo " (WEEKEND)";;*) echo "(Invalid weekday)";;esac
done[root@localhost tmp]# sh for4.sh Mon Tue wed Thu Fri sat Sun ok
positional parameter 1: Mon  (weekday)
positional parameter 2: Tue  (weekday)
positional parameter 3: wed  (weekday)
positional parameter 4: Thu  (weekday)
positional parameter 5: Fri  (weekday)
positional parameter 6: sat (Invalid weekday)
positional parameter 7: Sun (Invalid weekday)
positional parameter 8: ok (Invalid weekday)

for循环举例

1.例1 所有文件名大写替换为小写
#!/bin/bash
##filename:for5.sh
for fname in * ;do
fn=$(echo $fname | tr A-Z a-z)
if [[ $fname != $fn ]] ; then mv $fname $fn ; fi
done

这个脚本的功能是将当前目录下的所有的大写文件名改为小写文件名。注意,脚本中的*表示当前目录下的文件和目录。首先使用命令替换生成小写的文件名,赋予新的变量f,如果新生成的小写文件名与原文件名不同,则改为小写的文件名。
在这里插入图片描述

2. 例2 读取/etc/passwd文件,依次输出ip段
#!/bin/bash
##filename:for6.sh
i=1
for username in `awk -F: '{print $1}' /etc/passwd`
doecho "Username $((i++)) : $username"
donefor suffix in $(seq 10)
doecho "192.168.0.${suffix}"
done

脚本实现两个功能:
第1个功能是读取/etc/passwd 文件,通过awk 获取第1列的内容作为 list,注意in 后面命令的写法,是个反引号,也就是键盘(Esc)下面的那个键,
第2个功能是通过seq 指定数字list,从1~10,然后依次输出一个IP 范围段
在这里插入图片描述

3. 例3 读取/etc/hosts内容for循环,执行ping
#!/bin/bash
#filename:for7_host.shfor host in $(cat /etc/hosts)
doif ping -c1 -w2 $host &>/dev/nullthenecho "host ($host) is active."elseecho "host ($host) is down."fi
done

这个脚本的功能是通过读取/etc/hosts 的内容作为 for循环的list,然后对读取到的内容进行ping 操作,如果能够ping通,显示active,否则显示DOWN。
在这里插入图片描述

4. 例4 循环ip列表,输出对应编号
#!/bin/bash
#filename:for8.sh
mynet="192.168.0"
for num in {1..6}
do
echo "IP Address $num: $mynet.$num"
donefor num in {1..10..2}
do
echo "Number: $num"
done

这个脚本是通过数值范围作为 for 循环的 lit 列表,1.6表示从1~6,而110…2是使用包含步长(increment)的数值范围作为for 循环的list,表示从1~10,每隔2个步长,执行脚本,输出如下:
在这里插入图片描述

5. 例5 批量添加用户
#!/bin/bash
#filename:for9.sh
for x in {1..10}
do
useradd user${x}
echo "centos"|passwd --stdin user${x}
chage -d 0 user${x}
done

这个脚本功能是批量添加10个Linux系统用户。需要注意的是,stdin 是接受echo后面的字符串作为密码,stdin 表示非交互,直接传入密码,passwd 默认是要用终端作为标准输入,加上–stdin 表示可以用任意文件做标准输入,于是这里用管道作为标准输入。最后的chage命令是强制新建用户第1次登录时修改密码。
在这里插入图片描述

break

break用于强行退出当前循环,格式如下:

break [n]

如果是嵌套循环,则 break 命令后面可以跟一数字 n,表示退出第n重循环(最里面的为第1重循环)。

1. 例1 break
#!/bin/bash
#filename:for10.sh
i=1
for day in Mon Tue Wed Thu Fri
doecho "Weekday $((i++)) : $day"if [ $i -eq 3 ]; then	#脚本是当变量i等于3的时候退出循环,初始值为1。breakfi
done

在这里插入图片描述

continue

continue 用于忽略本次循环的剩余部分,回到循环的顶部,继续下一次循环,使用方法如下:

continue [n]

如果是嵌套循环,continue命令后面也可跟一数n,表示回到第n重循环的顶部。

1. 例1 continue
#!/bin/bash
##filename:for11.sh
i=1
for day in Mon Tue Wed Thu Fri Sat Sun
doecho -n "Day $((i++)) : $day"if [ $i -eq 7 -o $i -eq 8 ]; thenecho "(WEEKEND)"continuefiecho "(weekday)"
done

这个脚本的含义是变量i等于1~6时,输出对应的day变量的值,并显示(weekday),当变量i等于7或者8时,输出(WEEKEND)。注意这里的S((i++)),默认i等于1,当第1个i变量传递到f语句中时,i已经是2了。执行上面脚本,输出如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/135049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCA9535模块移植

在虚拟机环境里面找到内核文件 更改需要的信息 比如内核设备名称与设备树的名称是否一样 如有需要添加的应用程序 也需要添加进去 根据实际情况来 更改设备名称 还有注意的 比如中断号 根据硬件信息本次中断号为32 所以所有的设备树文件中断号都改为32 现在准备编写驱动文…

TensorFlow学习笔记--(1)张量的随机生成

张量的生成 如何判断一个张量的维数:看张量的中括号有几层 0 1 2 :零维数列 [2 4 6] : 一维向量 [ [1 2 3] [4 5 6] ] : 二维数组 两行三列 第一行数据为 1 2 3 第二行数据为 4 5 6 以此类推 n维张量有n层中括号 tf.zeros(%指定一个张量的维数%) 生成一…

合肥工业大学数据库实验报告

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少…

如何将 ONLYOFFICE 文档 7.5 与 Odoo 进行集成

在本教程中,我们将了解如何使用集成应用实现 ONLYOFFICE 文档与 Odoo 之间的连接。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一款全面的在线办公工具,提供了文本文档、电子表格和演示文稿的查看和编辑功能。它高度兼容微软 Office 格式,包括…

4m大小竟有200多个实用工具,你敢信

一、前言 今天要给大家介绍一款相当棒的工具,它运行的时候不需要占用电脑多大的内存空间,但是它却能给你提供200多个实用工具供你使用,而且这200多个工具中很多工具都超过4M,那么为什么这么多工具合在一起却只需要4M了&#xff0…

Oracle-Ogg经典模式升级为集成模式步骤

​前言: Oracle Ogg集成模式比起经典模式功能更加的强大,支持更多的数据类型,压缩表同步,XA事务,多线程模式,PDB模式同步,RAC环境下抽取配置简单等新功能,所以可以选择将经典模式升级转化为集成…

Java Excel Poi 单元格颜色设置

设置单元格的颜色 1.设置预定义的颜色 使用类IndexedColors 要自定义单元格颜色,首先需要创建一个新的CellStyle对象,并在其中设置背景颜色。然后,将CellStyle对象应用于单元格。下面是一个示例代码: // 导入所需的类 import or…

【Qt之QVariant】使用

介绍 QVariant类类似于最常见的Qt数据类型的联合。由于C禁止联合类型包括具有非默认构造函数或析构函数的类型,大多数有趣的Qt类不能在联合中使用。如果没有QVariant,则QObject::property()和数据库操作等将会受到影响。 QVariant对象同时持有一个单一…

基于显著性的无人机多光谱图像语义杂草检测与分类

Saliency-Based Semantic Weeds Detection and Classification Using UAV Multispectral Imaging(2023) 摘要1、介绍2、相关工作2.1 监督学习2.2 半监督学习2.3 无监督学习 3、方法3.1 贡献3.2 PC/BC-DIM NEURAL NETWORK(预测编码/有偏竞争-分裂输入调制…

【博弈论】混合策略纳什均衡

上一章中遇到了划线法无法找到均衡的情况,例如盖硬币博弈,盖方盖硬币,猜方猜正反。那是因为考虑的都是纯策略,就是每个策略要么选,要么不选。本章考虑混合策略,就是每个策略都有一个选择的概率。 考虑还是这…

HTTP头部信息解释分析(详细整理)(转载)

这篇文章为大家介绍了HTTP头部信息,中英文对比分析,还是比较全面的,若大家在使用过程中遇到不了解的,可以适当参考下 HTTP 头部解释 1. Accept: 告诉WEB服务器自己接受什么介质类型,/ 表示任何类型&#…

xilinx fpga ddr mig axi

硬件 参考: https://zhuanlan.zhihu.com/p/97491454 https://blog.csdn.net/qq_22222449/article/details/106492469 https://zhuanlan.zhihu.com/p/26327347 https://zhuanlan.zhihu.com/p/582524766 包括野火、正点原子的资料 一片内存是 1Gbit 128MByte 16bit …

Chrome 插件开发 V3版本 跨域处理

插件构成 chrome 插件通常由以下几部分组成: manifest.json:相当于插件的 meta 信息,包含插件的名称、版本号、图标、脚本文件名称等,这个文件是每个插件都必须提供的,其他几部分都是可选的。 background script&…

探索经典算法:贪心、分治、动态规划等

1.贪心算法 贪心算法是一种常见的算法范式,通常在解决最优化问题中使用。 贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法范式。其核心思想是选择每一步的最佳解决方案,以期望达到最终的全局最优解。这种算法特点在于只考虑局部最优解&am…

Linux Vim批量注释和自定义注释

使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符"#"再退回命令模式,非常麻烦。连续行的注释其实可以用替换命令来完成。 换句话说,在指定…

0.专栏概述与几句闲话

引 还记得今年大年初一开始写《数据结构和算法》专栏的时候定了个小目标: 不知不觉间已经过去了十个月,我的第一个专栏也算是圆满收官了 。 这次PO一张成都熊猫基地的团子们,开启设计模式这个专栏吧。 目录与概述 犹记得一位身在广州的老…

相机传感器

相机的传感器大小通常用英寸(1英寸2.54厘米)来表示。例如:全画幅相机的传感器大小为:36mm*24mm,称为 35mm全画幅。 几分之一英寸 所谓的 1/2.7,1/2.5等等,里面的分子1是一个标准,分…

java动态代理技术

为什么需要动态代理技术 如果对象身上干的事太多可以通过代理技术转移部分功能对象有什么办法需要被代理,代理就必须要有一定的方法 怎么实现动态代理 创建对象 public class 对象名 implement 接口{private String name;public 对象名(String name){this.name na…

c语言使用fdk_aac库对aac音频解码为pcm

//示例为adts的aac流数据&#xff08;adts数据可以每一包都可以独立解析不需要拼凑&#xff09; //解码数据的采样率同解码前的采样率&#xff0c;如果不满足需求&#xff0c;需要对数据进行重采样 #include <aacdecoder_lib.h>int m_fd -1; int m_fd2 -1;void aac2pc…

PySpark 优雅的解决依赖包管理

背景 平台所有的Spark任务都是采用Spark on yarn cluster的模式进行任务提交的&#xff0c;driver和executor随机分配在集群的各个节点&#xff0c;pySpark 由于python语言的性质&#xff0c;所以pySpark项目的依赖注定不能像java/scala项目那样把依赖打进jar包中轻松解决问题…