linux shell 编程:for循环、break、continue

介绍

支持多种遍历方式(如遍历列表、数字范围、文件等)。下面为你详细介绍 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

注意事项

  1. 列表元素分隔:默认以空格、制表符或换行分隔元素,若元素包含空格,需用引号包裹(如 "hello world");
  2. 通配符遍历:*.sh 会匹配当前目录下所有 .sh 文件,若没有匹配项,会原样输出 *.sh(可通过 shopt -s nullglob 优化);
  3. C语言风格兼容性:仅 bash 支持,sh(Bourne Shell)不支持,需注意脚本解释器。

总结

  1. 核心用途:for 循环用于遍历列表、数字、文件等,是Shell脚本中最常用的循环结构;
  2. 语法选择:遍历固定元素用for...in,数值循环用C语言风格;
  3. 扩展场景:结合数组、命令输出、嵌套循环可实现复杂逻辑,配合break/continue控制循环流程。

原文出处:/show_1GW2GaToDDKQ.html