@[TOC](内容预览 ≧∀≦ゞ
在 Shell 脚本中,循环是实现自动化任务的核心工具。它能够批量处理数据、执行重复性操作,从而提高效率。常见的循环结构包括 for、while 和 until。本篇将通过示例详解这些循环结构的用法、适用场景,以及它们之间的区别,帮助大家更灵活地使用循环控制逻辑。
一、for 循环
for 循环适用于遍历已知范围的列表或序列,是处理固定数据的首选。
示例 1:遍历指定值列表
# 遍历一个固定的值列表
for num in 1 2 3 4 5
do
echo "当前数字是 $num"
done
用法解析:
- 循环变量
num每次取列表中的一个值,直到取完所有值为止。 - 以上代码输出:
当前数字是 1 当前数字是 2 当前数字是 3 当前数字是 4 当前数字是 5
适用场景:
- 当需要处理一组固定的元素(如文件名、参数列表)时非常实用。
示例 2:单次循环一个字符串
# 遍历一个字符串
for str in "hello world"
do
echo "字符串内容:$str"
done
用法解析:
- 由于
"hello world"是一个整体,整个字符串被当作单个元素,因此只循环一次。 - 输出:
字符串内容:hello world
扩展说明:
- 若没有使用引号,则会将空格分隔的内容视为多个元素:
输出为:for word in hello world do echo $word donehello world
示例 3:使用 seq 生成数字序列
# 打印 1 到 100
for i in $(seq 1 100)
do
echo $i
done
用法解析:
seq 1 100生成一个从 1 到 100 的数字序列,$()负责将序列结果传递给for。- 输出结果为 1 到 100 的所有数字。
适用场景:
- 当需要循环固定范围的数字时,
seq提供了简洁的实现方式。
示例 4:C 风格双括号语法
# 打印 1 到 99
for ((i=1; i<100; i++))
do
echo $i
done
用法解析:
- 双括号语法与 C 语言风格类似:
for ((初始化; 条件; 递增))。 - 更适合需要复杂逻辑控制的场景,例如动态设置初始值或步长。
区别:
seq提前生成整个数字列表,效率较低;而双括号语法直接控制变量变化,不生成额外数据,性能更优。
二、while 循环
while 循环在条件为真时重复执行代码块,适合处理未知循环次数的场景。
示例 1:输出 1 到 10
# 初始化变量
i=1
# 条件循环
while ((i <= 10))
do
echo $i
((i++)) # 自增 1
done
用法解析:
while循环从i=1开始,每次检查条件i <= 10是否满足。- 输出结果为:
1 2 ... 10
示例 2:避免死循环
# 示例死循环(逻辑错误)
i=100
while ((i >= 10))
do
echo $i
((i++)) # 不断递增,条件永远成立
done
问题解析:
- 由于自增操作
(i++)导致i无限增长,条件(i >= 10)永远为真,形成死循环。
改进方案:
- 确保条件能够正确触发循环退出,例如:
while ((i <= 100))
示例 3:结合 let 命令进行自增
# 输出 1 到 10
i=1
while ((i <= 10))
do
echo $i
let "i++" # 使用 let 命令
done
区别说明:
let和(( ))均可用于算术运算,效果相同,但let更适合单独的运算操作。
示例 4:输出从 10 到 100
# 输出从 10 到 100
i=10
while ((i <= 100))
do
echo $i
let "i++"
done
用法解析:
- 通过设置初始值
i=10和条件i <= 100,实现自定义范围的循环输出。
三、until 循环
until 循环的逻辑与 while 相反:在条件为假时执行循环。
示例 1:输出 1 到 9
# 初始化变量
i=1
# 直到 i 不小于 10 时结束循环
until [ $i -ge 10 ]
do
echo $i
((i++))
done
用法解析:
- 条件
[ $i -ge 10 ]表示当i >= 10时退出循环;在此之前,循环体会持续执行。 - 输出结果为:
1 2 ... 9
适用场景:
- 当问题逻辑更自然地表达为“直到满足某条件时停止”时,
until是更优选择。
四、循环对比总结
| 循环类型 | 逻辑 | 适用场景 |
|---|---|---|
for |
遍历列表 | 已知范围或固定数量的操作,例如文件列表、数字序列等。 |
while |
条件为真 | 处理动态范围或未知次数的循环,例如用户输入、实时监控等。 |
until |
条件为假 | 在特定条件达成之前重复执行,例如检查进程完成状态、检测文件生成等。 |
以上是 Shell 脚本中三种循环结构的详细用法。通过示例代码与解析,相信大家对 for、while 和 until 的特点有了更深入的理解。在编写脚本时,灵活选择适合的循环结构,可以让代码更简洁、高效!
最后,再次感谢您阅读本篇文章,如果您对文中内容有任何疑问或建议,欢迎在评论区与我交流!您的点赞和分享将是我继续创作的动力。
原文 https://blog.csdn.net/2301_79518550/article/details/143985241