前言
while、until、for、select 循环时,要提前结束循环,可以使用 break 或者 continue 关键字。
“break”与“continue”的区别:
break:在for循环使用break,则跳出这个循环,循环命令结束
continue: 使用后,在当前循环终止命令,直接进入下个循环
break
语法
break [N]:提前结束第N层整个循环,最内层为第1层
n 表示跳出循环的层数,如果省略 n,则表示跳出当前的整个循环。break 通常和 if 一起使用,满足条件时便跳出循环。多层跳出用的地方非常少。
格式:
while CONDITION1; do
CMD1
...
if CONDITION2; then
break
fi
CMDn
...
done
示意图
brek 示例
- 汇总输入的数值:
#!/bin/bash
sum=0
while read n; do
if((n>0)); then
((sum+=n))
else
break
fi
done
echo "sum=$sum"
[root@zaishu sh]# ./calc.sh
10
20
0 // 触发break
sum=30
[root@zaishu sh]# ./calc.sh
10
20// Ctrl+D 组合键(表示输入结束)
sum=30
- 使用 break 跳出双层循环。
如果 break 不跟数字,表示跳出当前循环。例如,输出一个 4*4 的矩阵:
[root@zaishu sh]# cat juzhen.sh
#!/bin/bash
i=0
while ((++i)); do #外层循环
if((i>4)); then
break #跳出当前循环,也就是外层循环
fi
j=0;
while ((++j)); do #内层循环
if((j>4)); then
break #跳出当前循环,里面的循环
fi
printf "%-4d" $((i*j))
done
printf "\n"
done
[root@zaishu sh]# ./juzhen.sh
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
break 后面跟一个数字,让它一次性地跳出两层循环:
#!/bin/bash
i=0
while ((++i)); do #外层循环
if((i>4)); then
break
fi
j=0;
while ((++j)); do #内层循环
if((j>4)); then
break 2 // 2层循环都跳出
fi
printf "%-4d" $((i*j))
done
printf "\n"
done
[root@zaishu sh]# ./juzhen.sh
1 2 3 4
continue 关键字
语法
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层
n 表示循环的层数:
省略 n,表示 continue 只对当前层次的循环语句有效,遇到 continue 会跳过本次循环,忽略本次循环的剩余代码,直接进入下一次循环。
如果带上 n,比如 n 的值为 2,那么 continue 对内层和外层循环语句都有效,不但内层会跳过本次循环,外层也会跳过本次循环,其效果相当于内层循环和外层循环同时执行了不带 n 的 continue。多次跳过用途较少。continue 关键字也通常和 if 语句一起使用,即满足条件时便跳出循环。
格式:
while CONDITION1; do
CMD1
...
if CONDITION2; then
continue
fi
CMDn
...
done
- 示意图
continue示例
- 汇总用户输入的 100 以内的正数:
#!/bin/bash
sum=0
while read n; do
if((n<1 || n>100)); then
continue
fi
((sum+=n))
done
echo “sum=$sum”
[root@zaishu sh]# ./calc.sh
-1
-2
2
4
101 //Ctrl+D 结束输入,read n会判断失败,结束while
sum=6 //-1 -2 101 都会跳过,只计算2和4
- 跳出多层循环:
[root@zaishu sh]# cat con2.sh
#!/bin/bash
for((i=0;i<3;i++)); do
for((n= 0;n<10;n++)); do
if((n == 2)); then
continue 2 #当前for循环执行完后,后面的代码不会再执行,直接跳到最外层循环接着向下执行
fi
echo $n
done
print "\n"
done
[root@zaishu sh]# ./con2.sh
0
1
0
1
0
1
continue 2时,不但跳过了内层 for 循环,也跳过了外层 for 循环。
总结
while、until、for、select 循环时,要提前结束循环,可以使用 break 或者 continue 关键字。
“break”与“continue”的区别:
break:在for循环使用break,则跳出这个循环,循环命令结束
continue: 使用后,在当前循环终止命令,直接进入下个循环
版权声明:本文为wangzhicheng987原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。