介绍
支持多种遍历方式(如遍历列表、数字范围、文件等)。下面为你详细介绍 for 循环的语法、用法和示例:
基本语法
Shell 中的 for 循环主要有两种语法格式:
遍历列表(最常用)
for 变量名 in 列表元素1 列表元素2 ...
do
# 循环体(要执行的代码)
done
C语言风格(数值循环)
for (( 初始化表达式; 条件表达式; 更新表达式 ))
do
# 循环体
done
遍历列表例子
遍历固定列表
直接遍历指定的元素列表:
#!/bin/bash
# 遍历水果列表
for fruit in 苹果 香蕉 橙子 葡萄
do
echo "我喜欢吃 $fruit"
done
输出:
我喜欢吃 苹果
我喜欢吃 香蕉
我喜欢吃 橙子
我喜欢吃 葡萄
遍历数字范围
通过 {起始..结束} 命令生成数字序列(推荐)
#!/bin/bash
# 方式1:{起始..结束}(bash 4.0+支持)
echo "遍历1到5:"
for i in {1..5}
do
echo "数字:$i"
done
通过 seq 命令生成数字序列
#!/bin/bash
# 方式2:seq命令(兼容旧版本)
echo -e "\n遍历10到15(步长2):"
for j in $(seq 10 2 15)
do
echo "数字:$j"
done
输出:
遍历1到5:
数字:1
数字:2
数字:3
数字:4
数字:5
遍历10到15(步长2):
数字:10
数字:12
数字:14
遍历文件或目录
遍历当前目录下的文件,或指定路径的文件:
#!/bin/bash
# 遍历当前目录下的所有.sh文件
echo "当前目录下的Shell脚本:"
for file in *.sh
do
echo "- $file"
done
# 遍历指定目录下的所有文件
echo -e "\n/home目录下的文件:"
for item in /home/*
do
if [ -f "$item" ]; then
echo "文件:$item"
elif [ -d "$item" ]; then
echo "目录:$item"
fi
done
遍历命令输出结果
通过 $() 捕获命令输出,遍历结果:
#!/bin/bash
# 遍历系统中的用户(从/etc/passwd读取)
echo "系统用户列表(前5个):"
for user in $(cat /etc/passwd | head -5 | cut -d: -f1)
do
echo "- $user"
done
C语言风格循环
适合需要精确控制循环次数的场景:
注意: for (()) 两个 () 嵌套不能有空格,否则报错,如:for ( () )
#!/bin/bash
# 计算1到10的和
sum=0
# 注意:(()) 两个()嵌套不能有空格,否则报错
for (( i=1; i<=10; i++ ))
do
sum=$((sum + i))
done
echo "1到10的和:$sum" # 输出:55
break
break 终止循环
使用场景
在循环语句中,终止
例子
计划跟哥们跑3圈,跑完第1圈,看见女神,屁颠屁颠跟女神跑了,终止跑圈
#!/bin/bash
for i in {1..3}
do
echo "跑第$i圈"
if [ $i -eq 1 ]
then
echo "我跟女神走了,不跑圈了"
break
fi
done
输出:
跑第1圈
我跟女神走了,不跑圈了
continue
continue:跳过当前迭代,进入下一次循环。
使用场景
在循环语句中,表示 结束本次循环,继续下一次的循环
例子
计划跟哥们跑3圈,跑完第1圈,看见老师,跟老师说几句话,不跑第2圈,但跑第三圈
#!/bin/bash
for i in {1..3}
do
if [ $i -eq 2 ] # [ ] 左内、右内要有空格,否则报错
then
echo "我跟老师说几句话,不跑第2圈了"
continue
fi
echo "跑第$i圈"
done
输出:
跑第1圈
我跟老师说几句话,不跑第2圈了
跑第3圈
高级用法
遍历数组
结合数组遍历多个元素:
#!/bin/bash
# 定义数组
colors=("红色" "绿色" "蓝色" "黄色")
# 遍历数组
echo "颜色列表:"
for color in "${colors[@]}" # "${数组名[@]}" 表示所有元素
do
echo "- $color"
done
嵌套循环
循环内嵌套另一个循环:
#!/bin/bash
# 打印九九乘法表(前5行)
for (( i=1; i<=5; i++ ))
do
for (( j=1; j<=i; j++ ))
do
echo -n "$j*$i=$((i*j)) "
done
echo # 换行
done
输出:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
注意事项
- 列表元素分隔:默认以空格、制表符或换行分隔元素,若元素包含空格,需用引号包裹(如
"hello world"); - 通配符遍历:
*.sh会匹配当前目录下所有.sh文件,若没有匹配项,会原样输出*.sh(可通过shopt -s nullglob优化); - C语言风格兼容性:仅
bash支持,sh(Bourne Shell)不支持,需注意脚本解释器。
总结
- 核心用途:
for循环用于遍历列表、数字、文件等,是Shell脚本中最常用的循环结构; - 语法选择:遍历固定元素用
for...in,数值循环用C语言风格; - 扩展场景:结合数组、命令输出、嵌套循环可实现复杂逻辑,配合
break/continue控制循环流程。