linux shell 编程:for循环、break、continue 作者:马育民 • 2025-11-21 11:11 • 阅读:10004 # 介绍 支持多种遍历方式(如遍历列表、数字范围、文件等)。下面为你详细介绍 `for` 循环的语法、用法和示例: # 基本语法 Shell 中的 `for` 循环主要有两种语法格式: ### 遍历列表(最常用) ```bash for 变量名 in 列表元素1 列表元素2 ... do # 循环体(要执行的代码) done ``` ### C语言风格(数值循环) ```bash for (( 初始化表达式; 条件表达式; 更新表达式 )) do # 循环体 done ``` # 遍历列表例子 ### 遍历固定列表 直接遍历指定的元素列表: ```bash #!/bin/bash # 遍历水果列表 for fruit in 苹果 香蕉 橙子 葡萄 do echo "我喜欢吃 $fruit" done ``` **输出**: ``` 我喜欢吃 苹果 我喜欢吃 香蕉 我喜欢吃 橙子 我喜欢吃 葡萄 ``` ### 遍历数字范围 ##### 通过 `{起始..结束}` 命令生成数字序列(推荐) ```bash #!/bin/bash # 方式1:{起始..结束}(bash 4.0+支持) echo "遍历1到5:" for i in {1..5} do echo "数字:$i" done ``` ##### 通过 `seq` 命令生成数字序列 ```bash #!/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 ``` ### 遍历文件或目录 遍历当前目录下的文件,或指定路径的文件: ```bash #!/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 ``` ### 遍历命令输出结果 通过 `$()` 捕获命令输出,遍历结果: ```bash #!/bin/bash # 遍历系统中的用户(从/etc/passwd读取) echo "系统用户列表(前5个):" for user in $(cat /etc/passwd | head -5 | cut -d: -f1) do echo "- $user" done ``` # C语言风格循环 适合需要精确控制循环次数的场景: **注意:** `for (())` 两个 `()` 嵌套不能有空格,否则报错,如:`for ( () )` ```bash #!/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圈,看见女神,屁颠屁颠跟女神跑了,终止跑圈 ```bash #!/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圈,但跑第三圈 ```bash #!/bin/bash for i in {1..3} do if [ $i -eq 2 ] # [ ] 左内、右内要有空格,否则报错 then echo "我跟老师说几句话,不跑第2圈了" continue fi echo "跑第$i圈" done ``` **输出**: ``` 跑第1圈 我跟老师说几句话,不跑第2圈了 跑第3圈 ``` # 高级用法 ### 遍历数组 结合数组遍历多个元素: ```bash #!/bin/bash # 定义数组 colors=("红色" "绿色" "蓝色" "黄色") # 遍历数组 echo "颜色列表:" for color in "${colors[@]}" # "${数组名[@]}" 表示所有元素 do echo "- $color" done ``` ### 嵌套循环 循环内嵌套另一个循环: ```bash #!/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`控制循环流程。 原文出处:http://www.malaoshi.top/show_1GW2GaToDDKQ.html