8.6 循环

本实验手册讲解了Linux Shell脚本中的循环结构,包括不定循环(while和until)和固定循环(for)。

循环结构与条件判断(if…then…fi)同为程序设计中最基础的两大核心概念。通过循环,我们可以重复执行某段代码,直到满足特定条件为止。

循环主要分为两大类:

  1. 不定循环根据条件判断来决定是否继续循环。只要条件满足,就会一直执行下去。比如whileuntil语句。
  2. 固定循环预先确定运行的次数,完成指定次数后自动结束。比如for语句。

理解循环的关键,在于掌握循环的终止条件。对于不定循环,需要特别注意条件的设置,以免陷入死循环;而对于固定循环,则要明确知道需要重复执行的具体次数。

一般来说,不定循环最常见的就是底下这两种状态了。

bash

while [ condition ]  	# 中括号内的状态就是判断式
do           		    # do是循环的开始!
      程序段落
done                    #done是循环的结束

当条件成立时,就进行循环,直到条件不成立才停止

第二种:

bash

until [ condition ]
do
      程序段落
done

当条件成立时,就终止循环,否则就持续运行循环的程序段

这里设计一个简单的"倒计时/正计时"程序,直观对比 while 和 until 的区别:

bash

#!/bin/bash
# 文件名:loop_compare.sh

echo "=== while循环和until循环的对比 ==="

# while循环倒计时
echo "1. while循环倒计时:"
num=5
while [ $num -gt 0 ]    # 当num大于0时循环继续
do
    echo -n "$num "
    num=$((num - 1))
    sleep 1
done
echo "发射!"
echo

# until循环正计时
echo "2. until循环正计时:"
num=1
until [ $num -gt 5 ]    # 直到num大于5时循环结束
do
    echo -n "$num "
    num=$((num + 1))
    sleep 1
done
echo "完成!"
echo

# 显示对比要点
echo "=== 对比要点 ==="
echo "1. while循环:条件为真时继续循环"
echo "2. until循环:条件为假时继续循环"
echo "3. while [ 条件 ]  相当于  until [ !条件 ]"

运行结果:

while、until的循环方式必须要符合某个条件的状态,而for这种语法则是已经知道要进行几次循环的状态。语法如下所示:

bash

for var in con1 con2 con3 ...
do
      程序段
done

我们可以做个简单的练习。假设我们要表达对不同水果的喜爱,比如苹果、香蕉、橙子,如果每一行都要按"我喜欢吃苹果…“这样的句式输出,则可以如此撰写程序:

bash

#!/bin/bash

# 示例1:最基础的字符串遍历
echo "=== 示例1:遍历水果名 ==="
for fruit in apple banana orange
do
    echo "我喜欢吃 $fruit"
done
echo

# 示例2:中文字符串同样支持
echo "=== 示例2:遍历中文 ==="
for city in 北京 上海 广州 深圳
do
    echo "$city 是一线城市"
done
echo

# 示例3:包含空格的字符串需要引号
echo "=== 示例3:带空格的字符串 ==="
for message in "Good morning" "Good afternoon" "Good night"
do
    echo "$message"
done

编写一个Shell脚本,完成以下功能:

  1. 使用while循环,从10倒数到1,每次数完停顿一秒,每个数字之间用空格分隔,最后输出"新年快乐!”
  2. 使用for循环,列出你最喜欢的3个城市,每个城市前面加上序号(1,2,3),格式如下:

text

1. XX市
2. XX市
3. XX市

运行截图:

提交说明
携带 hostname,提交脚本内容截图

相关内容