Shell脚本详解:从理论到实践(三)
Shell脚本详解:循环
1.for循环
用途:遍历一个列表(如文件列表、数字序列、数组元素等)并执行重复操作。
示例1:遍历文件列表
#!/bin/bash # 遍历当前目录下所有.txt文件 for file in *.txt; do echo "处理文件: $file" # 这里可以添加具体操作,比如统计行数 wc -l "$file" done讲解:
for file in *.txt:将当前目录下所有.txt文件赋值给变量file。do ... done:循环体,对每个文件执行操作。echo和wc -l:打印文件名并统计行数。
示例2:遍历数字序列
#!/bin/bash # 生成数字序列:1到5 for i in {1..5}; do echo "当前数字: $i" done讲解:
{1..5}:生成一个从1到5的整数序列。- 每次循环将当前数字赋值给
i并打印。
示例3:C语言风格遍历
#!/bin/bash # 类C语法:初始化i=1;循环条件i<=5;步长i++ for ((i=1; i<=5; i++)); do echo "计数: $i" done讲解:
((i=1; i<=5; i++)):初始化、条件判断和步长更新。- 适用于需要精确控制循环次数的场景。
2.while循环
用途:当条件为真时重复执行代码块。
示例:读取文件内容
#!/bin/bash # 逐行读取文件 while IFS= read -r line; do echo "行内容: $line" done < "input.txt"讲解:
while read -r line:每次读取一行到变量line。IFS=:防止行首尾空格被截断。< "input.txt":输入重定向,从文件读取数据。
示例:条件计数
#!/bin/bash count=0 while [ $count -lt 5 ]; do echo "计数: $count" ((count++)) done讲解:
[ $count -lt 5 ]:条件判断(-lt表示小于)。((count++)):自增操作,避免死循环。
3.until循环
用途:当条件为假时重复执行,与while相反。
示例:等待服务启动
#!/bin/bash status="down" until [ "$status" == "up" ]; do echo "等待服务启动..." sleep 1 status=$(curl -s http://localhost/status) done echo "服务已就绪!"讲解:
until [ "$status" == "up" ]:条件为假时持续循环。curl检查服务状态,直到返回up才退出循环。
4. 循环控制语句
break:立即终止当前循环。for i in {1..10}; do if [ $i -eq 5 ]; then break # 当i=5时跳出循环 fi echo $i donecontinue:跳过当前迭代,进入下一次。for i in {1..5}; do if [ $i -eq 3 ]; then continue # 跳过i=3的迭代 fi echo $i done
总结
| 循环类型 | 适用场景 | 特点 |
|---|---|---|
for | 遍历列表、数字序列 | 明确循环次数 |
while | 条件为真时执行 | 可能无限循环(需谨慎) |
until | 条件为假时执行 | 与while互补 |
通过灵活组合这些循环结构,可以高效处理自动化任务,如日志分析、批量文件操作等。
