Unix / Linux - Shell 循环控制
你好,有抱负的程序员们!今天,我们将深入探索Unix和Linux shell脚本中的循环控制世界。作为你友好邻邦的计算机老师,我将引导你一步一步地完成这次旅行。如果你是编程新手,不用担心——我们将从基础开始,逐步提升。所以,拿起一杯咖啡(或者茶,如果你喜欢的话),让我们一起进入循环!
理解循环
在我们跳入循环控制之前,让我们快速回顾一下循环是什么。想象你被分配了一个任务,在黑板上写100次“我爱编程”。你不需要手动写100次,而是可以使用循环来自动化这个重复的任务。这正是编程中循环的作用——它们允许我们多次执行一组命令,而无需反复编写它们。
无限循环
现在,让我们来谈谈一些既迷人又可能潜在危险的东西:无限循环。它就像一个永不停止的旋转木马——它只是不停地转动。
什么是无限循环?
无限循环是一个由于其终止条件永远不会满足而继续运行的循环。虽然这听起来像是灾难的配方,但实际上在某些场景下无限循环是有用的(稍后会详细介绍)。
无限循环示例
下面是在shell脚本中一个简单的无限循环示例:
#!/bin/bash
while true
do
echo "这是一个无限循环!"
sleep 1
done
在这个脚本中:
-
while true
创建了一个始终为真的条件,因此循环永远不会停止。 -
echo
打印我们的消息。 -
sleep 1
在下一次迭代之前暂停脚本1秒。
如果你运行这个脚本,你会看到每秒都会打印 "这是一个无限循环!",直到你手动停止脚本(通常是按 Ctrl+C)。
我们什么时候会使用无限循环?
相信或不相信,无限循环并不总是坏的!它们在以下场景中可能很有用:
- 创建需要持续运行的程序(如服务器)。
- 实现一个用户可以重复选择选项的菜单系统。
- 监控特定事件或条件的系统。
请记住,能力越大,责任越大。总是确保你有办法在需要时退出你的无限循环!
break 语句
现在我们已经看到了循环可以永远继续下去,让我们学习如何在想要的时候停止它们。引入 break
语句——从任何循环中的紧急出口。
break 是做什么的?
break
语句所做的正如其名——它“跳出”当前的循环,不管循环的条件是否仍然为真。
使用 break 的示例
让我们修改之前的无限循环,使其在5次迭代后停止:
#!/bin/bash
count=0
while true
do
echo "循环迭代:$count"
count=$((count + 1))
if [ $count -eq 5 ]
then
echo "跳出循环!"
break
fi
sleep 1
done
echo "循环已结束。"
在这个脚本中:
- 我们初始化一个
count
变量来跟踪迭代次数。 - 每次迭代,我们增加
count
并检查它是否等于5。 - 如果
count
是5,我们打印一条消息并使用break
来退出循环。
当你运行这个脚本时,你会看到它计数到5然后停止。
continue 语句
虽然 break
让我们完全退出循环,但有时我们只是想跳过当前迭代的剩余部分并移动到下一个迭代。这时 continue
就派上用场了。
continue 是做什么的?
continue
语句跳过当前循环迭代的剩余部分,并跳转到下一个迭代。
使用 continue 的示例
让我们创建一个脚本,打印从1到10的数字,但跳过偶数:
#!/bin/bash
for i in {1..10}
do
if [ $((i % 2)) -eq 0 ]
then
continue
fi
echo $i
done
在这个脚本中:
- 我们使用一个
for
循环来迭代1到10。 -
if [ $((i % 2)) -eq 0 ]
检查数字是否为偶数(即能否被2整除且余数为0)。 - 如果数字是偶数,
continue
跳转到下一个迭代。 - 否则,我们打印该数字。
当你运行这个脚本时,你将只看到奇数被打印:1, 3, 5, 7, 9。
一切皆有可能
现在我们已经学习了无限循环、break
和 continue
,让我们创建一个更复杂的示例,它使用了所有这些概念:
#!/bin/bash
echo "欢迎来到数字猜谜游戏!"
secret_number=$((RANDOM % 10 + 1))
attempts=0
while true
do
read -p "猜测一个1到10之间的数字(或输入'q'退出): " guess
if [ "$guess" = "q" ]
then
echo "感谢游玩!秘密数字是 $secret_number。"
break
fi
if ! [[ "$guess" =~ ^[0-9]+$ ]]
then
echo "请输入一个有效的数字或'q'退出。"
continue
fi
attempts=$((attempts + 1))
if [ "$guess" -eq "$secret_number" ]
then
echo "恭喜!你用了 $attempts 次尝试猜对了数字!"
break
elif [ "$guess" -lt "$secret_number" ]
then
echo "太低了!再试一次。"
else
echo "太高了!再试一次。"
fi
done
这个脚本创建了一个简单的数字猜谜游戏,展示了:
- 一个无限循环来保持游戏运行。
- 使用
break
在玩家猜对数字或选择退出时退出。 - 使用
continue
跳过无效输入。
循环控制语句总结
下面是我们学到的循环控制语句的快速参考表:
语句 | 描述 | 用例 |
---|---|---|
while true |
创建一个无限循环 | 当你需要一个循环持续运行直到满足特定条件时 |
break |
退出当前循环 | 当你基于某个条件想要停止循环时 |
continue |
跳转到循环的下一个迭代 | 当你想要基于某个条件跳过当前迭代的剩余部分时 |
请记住,循环是编程中的强大工具,但能力越大,责任越大。总是确保你有办法退出你的循环,并且明智地使用 break
和 continue
来创建高效和有效的脚本。
快乐的编码,未来的shell脚本巫师们!愿你的循环在你想要的时候无限,愿你的 break
语句总能在需要的时候出现。下次见,继续循环和学习!
Credits: Image by storyset