break和continue在循环中的使用

打印出1至9,但是不打印其中的4和6

这样写:

#!/bin/bash
a=0
max=9
echo "test continue"
while [ "$a" -lt $max ]
do
let "a+=1"
if [ "$a" -eq 4 ] || [ "$a" -eq 6 ]
then
continue
fi
echo "$a"
done

输出

-bash-3.00# ./10.20.sh
test continue
1
2
3
5
7
8
9


可以看到其中的4和6没有打印,可以使用continue使跳到下一个循环,这个循环剩余的命令就不执行了。


如果使用的是break呢?

把continue换成break试试

输出

-bash-3.00# ./10.20.sh
test continue
1
2
3

可见使用了break后就完成跳出了这个循环了,需要说明的是,break 命令可以带一个参数.一个不带参数的break 循环只能退出最内层的循环,而break N 可以退出 N 层循环.


比如说哪嵌套的那个脚本过来做测试就可以知道了

改为这样

#!/bin/bash
outer=1
for i in 1 2 3
do
echo "pass $outer in outer loop"
inner=1
for i in 1 2 3 4 5
do
if [ "$i" -eq 4 ]
then
break
fi
echo "pass $inner in inner loop"
let "inner+=1"
done
let "outer+=1"
echo "----------------"
done

输出

pass 1 in outer loop
pass 1 in inner loop
pass 2 in inner loop
pass 3 in inner loop
----------------
pass 2 in outer loop
pass 1 in inner loop
pass 2 in inner loop
pass 3 in inner loop
----------------
pass 3 in outer loop
pass 1 in inner loop
pass 2 in inner loop
pass 3 in inner loop
----------------


可以看到只跳出了内部的那个循环,如果break改为break 2呢

看输出

-bash-3.00# ./10.9.sh
pass 1 in outer loop
pass 1 in inner loop
pass 2 in inner loop
pass 3 in inner loop


这里可以看到跳出了两个循环。

猜你喜欢

转载自ahaoge.iteye.com/blog/1490764