介绍
在本实验中,你将学习如何在 Bash 脚本中使用循环。循环是强大的工具,允许你多次重复一组指令,从而使你的脚本更加高效和灵活。我们将涵盖三种类型的循环:for、while 和 until。此外,你还将探索 break 和 continue 语句,它们提供了对循环执行的控制。本实验专为初学者设计,将引导你逐步掌握每个概念。
在本实验中,你将学习如何在 Bash 脚本中使用循环。循环是强大的工具,允许你多次重复一组指令,从而使你的脚本更加高效和灵活。我们将涵盖三种类型的循环:for、while 和 until。此外,你还将探索 break 和 continue 语句,它们提供了对循环执行的控制。本实验专为初学者设计,将引导你逐步掌握每个概念。
让我们从设置工作环境开始。我们将创建一个新目录来存储所有的循环实验文件。
在 WebIDE 中打开终端。默认情况下,你应该处于 /home/labex/project 目录中。如果不确定,可以随时使用此命令导航到该目录:
cd /home/labex/project
现在,为我们的循环实验创建一个新目录:
mkdir bash_loops
cd bash_loops
这会创建一个名为 bash_loops 的新目录并进入其中。我们将在这个目录中进行所有的循环实验。
为什么要这样做?将脚本组织到目录中是一个良好的实践。它可以保持工作区整洁,并使查找和管理文件变得更加容易。
for 循环用于遍历一系列值。这就像在说:「对于列表中的每个项目,执行某些操作。」让我们创建一个脚本来演示如何使用 for 循环。
在 bash_loops 目录中创建一个名为 for_loop.sh 的新文件:
touch for_loop.sh
现在,在 WebIDE 中打开 for_loop.sh 文件并添加以下内容:
#!/bin/bash
## 遍历名称数组
echo "Looping through an array:"
NAMES=("Alice" "Bob" "Charlie" "David")
for name in "${NAMES[@]}"; do
echo "Hello, $name!"
done
echo ## 打印空行以提高可读性
## 遍历数字范围
echo "Looping through a range of numbers:"
for i in {1..5}; do
echo "Number: $i"
done
让我们分解一下这个脚本的作用:
{1..5} 从 1 数到 5。"${NAMES[@]}" 这种语法可能看起来很奇怪。@ 表示「数组的所有元素」,而引号和大括号确保每个元素都被视为一个独立的项,即使它包含空格也是如此。
保存文件并使用此命令使其可执行:
chmod +x for_loop.sh
chmod +x 命令使文件具有可执行权限,这意味着你可以将其作为程序运行。
现在,运行脚本:
./for_loop.sh
你应该会看到如下输出:
Looping through an array:
Hello, Alice!
Hello, Bob!
Hello, Charlie!
Hello, David!
Looping through a range of numbers:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
这演示了 for 循环如何遍历数组和数字范围。
只要指定的条件为真(true),while 循环就会执行一段代码块。这就像在说:「当此条件为真时,请继续执行此操作。」
创建一个名为 while_loop.sh 的新文件:
touch while_loop.sh
在 WebIDE 中打开 while_loop.sh 文件并添加以下内容:
#!/bin/bash
## 使用 while 循环进行简单的倒计时
count=5
echo "Countdown:"
while [ $count -gt 0 ]; do
echo $count
count=$((count - 1))
sleep 1 ## 等待 1 秒
done
echo "Blast off!"
让我们分解这个脚本:
count=5 开始,设置初始倒计时值。[ $count -gt 0 ] 表示「当 count 大于 0 时」。sleep 1 命令会让脚本暂停 1 秒钟,从而产生实时的倒计时效果。
保存文件并使其可执行:
chmod +x while_loop.sh
现在,运行脚本:
./while_loop.sh
你会看到从 5 到 1 的倒计时,每个数字之间有一秒钟的停顿:
Countdown:
5
4
3
2
1
Blast off!
这演示了 while 循环如何重复执行操作,直到条件不再满足。
until 循环与 while 循环类似,但有一个重要的区别:它会一直执行,直到指定的条件变为真(true)。这就像在说:「继续执行此操作,直到此条件为真。」
创建一个名为 until_loop.sh 的新文件:
touch until_loop.sh
在 WebIDE 中打开 until_loop.sh 文件并添加以下内容:
#!/bin/bash
## 使用 until 循环数到 5
count=1
echo "Counting up to 5:"
until [ $count -gt 5 ]; do
echo $count
count=$((count + 1))
sleep 1 ## 等待 1 秒
done
让我们分解这个脚本:
count=1 作为初始值。[ $count -gt 5 ] 表示「直到 count 大于 5」。保存文件并使其可执行:
chmod +x until_loop.sh
现在,运行脚本:
./until_loop.sh
你会看到打印出数字 1 到 5,每个数字之间有一秒钟的停顿:
Counting up to 5:
1
2
3
4
5
这演示了 until 循环如何重复执行操作,直到条件变为真。
break 和 continue 语句用于控制循环的流程。break 会提前退出循环,而 continue 会跳过当前迭代的剩余部分并进入下一次迭代。
创建一个名为 break_continue.sh 的新文件:
touch break_continue.sh
在 WebIDE 中打开 break_continue.sh 文件并添加以下内容:
#!/bin/bash
## 使用 break 提前退出循环
echo "Demonstration of break:"
for i in {1..10}; do
if [ $i -eq 6 ]; then
echo "Breaking the loop at $i"
break
fi
echo $i
done
echo ## 打印空行以提高可读性
## 使用 continue 跳过迭代
echo "Demonstration of continue (printing odd numbers):"
for i in {1..10}; do
if [ $((i % 2)) -eq 0 ]; then
continue
fi
echo $i
done
让我们分解这个脚本:
i 等于 6 时,我们使用 break 退出循环。continue 跳过偶数。条件 $((i % 2)) -eq 0 用于检查一个数是否为偶数(即除以 2 余数为 0)。% 运算符用于计算除法后的余数。因此,对于偶数,i % 2 的结果为 0,对于奇数,结果为 1。
保存文件并使其可执行:
chmod +x break_continue.sh
现在,运行脚本:
./break_continue.sh
你应该会看到如下输出:
Demonstration of break:
1
2
3
4
5
Breaking the loop at 6
Demonstration of continue (printing odd numbers):
1
3
5
7
9
这演示了 break 如何提前退出循环,以及 continue 如何根据条件跳过某些迭代。
在本实验中,你学习了 Bash 脚本中的三种循环类型:
for 循环:遍历项目列表或数字范围。while 循环:只要条件为真就继续执行。until 循环:一直执行直到条件变为真。你还学习了 break 和 continue 语句,它们让你能够更精细地控制循环。
这些循环结构是许多脚本的基础,能够让你高效地自动化重复性任务。请尝试在自己的脚本中使用这些循环,以进一步熟悉它们的行为和应用场景。