shell编程之循环语句 for
1 什么是循环
凡是重复执行一段代码, 都可以称之为循环。 循环体中三种专业的话术:遍历、迭代、递归 。
- 遍历(traversal) - 按规则访问非线性结构中的每一项。
- 迭代(iterate) - 按顺序访问线性结构中的每一项。
- 递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况。
通常有进入循环的条件和退出循环的条件。
循环次数分为两种:
- 循环次数事先已知
- 循环次数事先未知
常见的循环命令:for, while, until。
2 for循环语句
用法:
- 读取不同的变量值,用来逐个执行同一组命令。
- 使用场景:一般用于循环次数事先已知的场景。
- 执行机制:遍历。
格式:
for 变量名 in 取值列表
do
命令序列 done
执行机制:
1.依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束。
2.如果省略 [in WORDS ... ] ,此时使用位置参数变量 in "$@"

2.1 for语句的作用演示
1、打印1到10的三种方法:

2、打印1到10之间的奇数:

3、打印1到10之间的偶数:

2.2 for循环应用示例
示例1:求从1加到10的和。
创建脚本:

示例2:批量添加用户
要求:
- 用户名存放在users.txt文件中,每行一个
- 初始密码均设为123456
创建脚本:

示例3:根据IP地址检查主机状态
要求:
- IP地址存放在ips.txt文件中,每行一个
- 使用ping命令检测各主机的连通性
创建脚本:

3 多线程执行脚本(并行执行)
普通for循环是串行,一个一个执行。
在do和done中间增加 { } 符号,可以多线程同时执行。
多线程案例演示:
- ping 192.168.72.0/24网段内的所有主机。

4.1 分隔符的作用演示:
示例:使用for读取文件内容,文件中有空格
演示:
文件中只有3行内容,使用for语句读取却显示为5行。

原因:
变量IFS定义的分隔符中有空格,for从文件中获取变量值时,以空格作为了分隔符,将"zhang san"分隔成了两行,"wang wu"也是如此。
解决方法:
在脚本中,先临时将变量IFS的值中的空格删除,使for语句不以空格作为分隔符,最后还原变量值。


【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)