主页 > 系统脚本讲解

Shell脚本中的循环控制结构:For与While循环详解及实例应用

更新: 2024-12-07 05:39:50   人气:9943
在 Shell 脚本编程中,循环是一种强大的工具,它允许程序执行重复的任务直到满足特定条件为止。两种主要的循环机制是 For 循环和 While 循环,在处理文件列表、数组元素或等待某个条件变为真时尤为实用。

### **一、For 循环**

**1. 基础语法与实例应用**

`for` 循环主要用于遍历一系列项目(如数字序列、字符串或者文件名等)。基本格式如下:

bash

for var in item_1 item_2 ... item_n
do
# commands to be executed for each iteration using $var
done


例如,要逐行读取一个文本文件的内容并打印到终端:

bash

#!/bin/bash

file="example.txt"

# 使用 'cat' 和 read 的组合通过管道配合 for 循环来按行读取文件内容
cat "$file" | while IFS= read -r line; do
echo "Line is: '$line'"
done

另一种常见的用法是对一组数值进行迭代操作:

bash

#!/bin/bash

for i in {1..5}; do # 这将从1递增至5
echo "The number is: $i"
done


**2. C-Style For Loop (增强型)**

Bash shell还支持C语言风格的 `for` 循环,其形式为初始化变量、测试表达式以及更新部分均明确指定:

bash

for (( init_expression ; condition_test ; update_expression )); do
# Commands...
done

举例来说,计算1~10之间的整数之和可以这样实现:

bash

#!/bin/bash

sum=0
for((i = 1; i <= 10; i++)); do
sum=$((sum + i))
done
echo "Sum of numbers from 1 to 10 : $sum"


### **二、While 循环**

**3. 基础语法与实例应用**

`while` 循环会在给定条件保持真的情况下持续执行一段命令集,它的基础结构看起来像下面的样子:

bash

while [condition]
do
#commands
done

比如创建一个简单的计数器,并在其值小于等于5的情况下继续输出当前值:

bash

#!/bin/bash

counter=1
while [[ $counter -le 5 ]]
do
echo "Counter value is: $counter"
counter=$((counter+1))
done


此外,还可以结合输入判断语句使用,只有当用户正确回答问题时才结束循环:

bash

#!/bin/bash

read -p "Please input yes or no: " answer

while ! [[ "$answer" =~ ^[YyNn]$ ]]; do
echo "Invalid response, please enter either 'yes' or 'no'."
read -rp "Try again: " answer
done
echo "Received valid response."


总结起来,无论是基于索引/项目的 For 循环还是依赖于布尔逻辑结果的 While 循环,都是 Bash 中不可或缺的一部分,它们极大地增强了脚本对复杂任务的自动化能力。熟练掌握这两种循环结构的应用场景及其特点,能显著提升编写高效且健壮shell脚本的能力。