不是所有的循环体都只能等待所有循环结束后才能退出,使用 break 或 continue 可以控制循环的流程。
1. break
跳出当前循环体,如果有多层循环,只跳出当前层。
例如:
#!/bin/bash
echo for的输出:
for num in {0..9}
do
echo $num
if [[ $num -eq 4 ]]
then
break
fi
done
echo while的输出:
num=0
while [[ $num -lt 10 ]]
do
echo $num
if [[ $num -eq 4 ]]
then
break
fi
((num++))
done
echo until的输出:
num=0
until [[ $num -ge 10 ]]
do
echo $num
if [[ $num -eq 4 ]]
then
break
fi
((num++))
done
以上代码无论是 for、while 还是 until,都添加了在 num 等于4时跳出循环的设置,来看看输出:
for的输出:
0
1
2
3
4
while的输出:
0
1
2
3
4
until的输出:
0
1
2
3
4
可以看到,循环到4的时候就停止了。
下边看看嵌套循环的例子:
[root@server ~]# cat break2.sh
#!/bin/bash
for i in {1..5}
do
for j in {1..5}
do
echo "($i,$j)"
if [[ $i -eq $j ]]
then
break
fi
done
done
[root@server ~]# sh break2.sh
(1,1)
(2,1)
(2,2)
(3,1)
(3,2)
(3,3)
(4,1)
(4,2)
(4,3)
(4,4)
(5,1)
(5,2)
(5,3)
(5,4)
(5,5)
可以看到,break 只是跳出了内层循环,外层循环不受影响,因为 break 之后 i 的值还在递增。如果 break 是跳出所有循环,那么只会输出 (1,1)。
break 可以跟上一个正整数,代表跳出几层循环:
[root@server ~]# cat break3.sh
#!/bin/bash
for i in {1..3}
do
for j in {1..3}
do
for k in {1..3}
do
echo "($i,$j,$k)"
if [[ $i -eq $j && $j -eq $k ]]
then
break 2
elif [[ $i -eq $k ]]
then
break
fi
done
done
done
[root@server ~]# sh break3.sh
(1,1,1)
(2,1,1)
(2,1,2)
(2,2,1)
(2,2,2)
(3,1,1)
(3,1,2)
(3,1,3)
(3,2,1)
(3,2,2)
(3,2,3)
(3,3,1)
(3,3,2)
(3,3,3)
2. continue
跳出当次循环。
例如:
[root@server ~]# cat continue.sh
#!/bin/bash
echo for的输出:
for num in {1..5}
do
if (($num==3))
then
continue
fi
echo $num
done
echo while的输出:
num=0
while [[ num -lt 5 ]]
do
((num++))
if [[ $num -eq 3 ]]
then
continue
fi
echo $num
done
echo until的输出:
num=0
until [[ num -ge 5 ]]
do
((num++))
if [[ $num -eq 3 ]]
then
continue
fi
echo $num
done
当 num 等于 3 时,跳到下一次循环,即当次循环的打印操作不执行,所以没有打印 3:
[root@server ~]# sh continue.sh
for的输出:
1
2
4
5
while的输出:
1
2
4
5
until的输出:
1
2
4
5
continue 也可以跟上一个正整数,代表跳到下几层循环:
[root@server ~]# cat continue2.sh
#!/bin/bash
for i in {1..5}
do
for j in {1..3}
do
if [[ $i -eq 3 ]]
then
continue 2
fi
echo "($i,$j)"
done
done
[root@server ~]# sh continue2.sh
(1,1)
(1,2)
(1,3)
(2,1)
(2,2)
(2,3)
(4,1)
(4,2)
(4,3)
(5,1)
(5,2)
(5,3)
总结
break 可以跳出本层循环,break n 可以跳出 n 层循环。continue 可以跳过本层的本次循环,continue n 可以跳过 n 层的本次循环。
5801

被折叠的 条评论
为什么被折叠?



