Shell 循环结构中continue和break的用法

Shell 循环结构中continue和break的用法

Shell编程中常用到循环结构以完成大量重复的、有规律任务。
一般而言,脚本程序在开始执行循环体后,要等到所有循环迭代完成后,循环命令才会结束。
但我们可以使用两个特定的命令continue、break配合条件判断命令控制循环体在执行过程中停止执行。
尽管continue和break都是用在循环体中,用以停止某个层次循环的终止,但二者作用域却不同。

continue命令

continue用于停止本次循环,不再执行后续命令,直接进入下一轮循环,并非将整个循环体终止。
假设一个循环体原本需要执行10次循环,但是在执行到第5次的时候,满足某个条件,开始执行continue命令,continue命令会直接终止第5次循环,开始执行第6次循环,直到循环结束。

下面以示例代码进行解说。

[root@Centos]#cat t1.sh
#!/bin/bash
for (( i = 1; i < 11; i++ ))
do
  if [ $i -eq 4 ] || [ $i -eq 7 ]
  then
    continue
  fi
  echo "Iteration number: $i"
done

脚本t1.sh实现的功能是将1-10中除了4和7,其余的数字都打印出来。

观察脚本命令,第二行定义了一个for循环for (( i = 1; i < 11; i++ )),其中变量i初始值为1,循环执行判断条件为i < 11,并在每一次循环结束后自加1,并将新的变量i的值送入循环执行判断条件i < 11,若满足则执行循环体;若不满足则for循环终止。接下来的7行都属于for循环体。

for循环中有一条if判断语句if [ $i -eq 4 ] || [ $i -eq 7 ],表明当变量i的值为4或者7,都将执行if条件判断语句里面的命令。

一般而言,执行完if语句后,还会继续执行for循环体剩下的命令echo "Iteration number: $i",但由于if语句里面的命令时continue,会直接跳出本次循环,不在执行后续的echo "Iteration number: $i",后或i自加1,执行for循环判断,直到i=11,i < 11为假,循环结束。

脚本执行结果如下:

[root@Centos]#./t1.sh
Iteration number: 1
Iteration number: 2
Iteration number: 3
Iteration number: 5
Iteration number: 6
Iteration number: 8
Iteration number: 9
Iteration number: 10

break命令

break命令用于跳出当前命令所在的循环体,也即直接终止了整个循环命令。
还是假设一个循环体原本需要执行10次循环,但是在执行到第5次的时候,满足某个条件,开始执行break命令,break命令会直接终止并跳出整个循环,后续的第6、7、8、9、10次循环不在执行。
现在将前面测试continue的脚本略作修改,将continue替换成break,就可简单观察出break命令的特点。

下面以示例代码进行解说。

[root@Centos]#cat t2.sh
#!/bin/bash
for (( i = 1; i < 11; i++ ))
do
 if [ $i -eq 4 ] || [ $i -eq 7 ]
 then
   break
 fi
 echo "Iteration number: $i"
done

脚本t2.sh实现的功能是按顺序打印1-10,如果遇到数字4或者7,循环结束,后续数字不在打印。
观察脚本命令,第二行定义了一个for循环for (( i = 1; i < 11; i++ )),其功能和前面测试continue的脚本一致,不再赘述。

而for循环里面的执if判断语句,当匹配到i=4后,开始执行break命令,直接终止并跳出本整个for循环,不在执行后续的echo "Iteration number: $i"

脚本执行结果如下:

[root@Centos]#./t2.sh
Iteration number: 1
Iteration number: 2
Iteration number: 3

break命令在多层嵌套循环中的使用

前面我们提到在循环体中执行break命令会终止循环体,现在我们再来看一个例子:

[root@Centos]#cat t3.sh
#!/bin/bash
for (( m=2;m < 5;m++  ))
do
  for (( n=1;n < 5;n++ ))
  do
    if [ $[$n%3] -eq 0 ]
    then
      break
    fi
  echo "$m * $n = $[$m*$n]"
  done
done

脚本在第一个for循环for (( m=2;m < 5;m++ ))内部又定义了一个for循环for (( n=1;n < 5;n++ ))
在第二个循环内部定一个执行break的if条件判断语句if [ $[$n%3] -eq 0 ],即当n为3的整数倍时,执行break命令。
按照break跳出循环体的功能,当m=2,n=3时,执行break命令,猜测会有如下结果输出:

# 预测结果
2 * 1 = 2
2 * 2 = 4

但实际脚本的执行结果如下:

# 实际结果
2 * 1 = 2
2 * 2 = 4
3 * 1 = 3
3 * 2 = 6
4 * 1 = 4
4 * 2 = 8

所以要注意,
因为代码中的break是内循环的,所以内循环break结束后,外循环依然继续。

对于多层的循环,break的作用也是相似的,它终止的是命令所在的循环体。其上层循环体不受影响。

原文链接:https://blog.csdn.net/geoffreychan/article/details/77608693

(以上。)

发布了30 篇原创文章 · 获赞 2 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Olivia_Vang/article/details/104100762