教程内容

for 循环

for 循环是 Shell 脚本中最常用的循环结构之一。

# 基本结构
for arg in [list]
do
  command(s)...
done

在每次循环迭代中,变量 arg 会依次获取列表中的每个值,随后执行相应的命令。

# 遍历数组成员
NAMES=(Joe Jenny Sara Tony)
for N in ${NAMES[@]} ; do
  echo "My name is $N"
done

# 遍历命令输出结果
for f in $( ls prog.sh /etc/localtime ) ; do
  echo "File is: $f"
done

while 循环

while 循环在条件为真时重复执行命令。

# 基本结构
while [ condition ]
do
  command(s)...
done

while 结构会测试条件,如果结果为 true,则执行命令。只要条件保持为真,循环就会持续进行。

COUNT=4
while [ $COUNT -gt 0 ]; do
  echo "Value of count is: $COUNT"
  COUNT=$(($COUNT - 1))
done

until 循环

until 循环与 while 循环相反,它在条件为假时执行命令。

# 基本结构
until [ condition ]
do
  command(s)...
done

until 结构会测试条件,如果结果为 false,则执行命令。只要条件保持为假,循环就会持续进行(与 while 结构逻辑相反)。

COUNT=1
until [ $COUNT -gt 5 ]; do
  echo "Value of count is: $COUNT"
  COUNT=$(($COUNT + 1))
done

break 和 continue 语句

breakcontinue 可用于控制 forwhileuntil 循环的执行流程。

  • continue:跳过当前迭代的剩余部分,直接进入下一次循环。
  • break:立即终止整个循环,执行循环之后的代码。

示例如下:

# 打印 0,1,2,3,4
COUNT=0
while [ $COUNT -ge 0 ]; do
  echo "Value of COUNT is: $COUNT"
  COUNT=$((COUNT+1))
  if [ $COUNT -ge 5 ] ; then
    break
  fi
done

# 仅打印奇数 - 1,3,5,7,9
COUNT=0
while [ $COUNT -lt 10 ]; do
  COUNT=$((COUNT+1))
  # 检查 COUNT 是否为偶数
  if [ $(($COUNT % 2)) = 0 ] ; then
    continue
  fi
  echo $COUNT
done

练习任务

在本练习中,您需要遍历数字列表,并按接收顺序打印出所有偶数。当遇到数字 237 时停止循环(不打印 237 及其之后的任何数字)。

参考代码

#!/bin/bash
NUMBERS=(951 402 984 651 360 69 408 319 601 485 980 507 725 547 544 615 83 165 141 501 263 617 865 575 219 390 237 412 566 826 248 866 950 626 949 687 217 815 67 104 58 512 24 892 894 767 553 81 379 843 831 445 742 717 958 609 842 451 688 753 854 685 93 857 440 380 126 721 328 753 470 743 527)

# 在此处编写您的代码

预期输出

402
984
360
408
980
544
390

参考答案

#!/bin/bash
NUMBERS=(951 402 984 651 360 69 408 319 601 485 980 507 725 547 544 615 83 165 141 501 263 617 865 575 219 390 237 412 566 826 248 866 950 626 949 687 217 815 67 104 58 512 24 892 894 767 553 81 379 843 831 445 742 717 958 609 842 451 688 753 854 685 93 857 440 380 126 721 328 753 470 743 527)

for gg in ${NUMBERS[@]}; do
    if [ $gg == 237 ]; then
        break
    elif [ $(($gg % 2)) == 0 ]; then
        echo $gg
    fi
done

系列教程导航