shell 的 break 和 continue

  |  

摘要: 本文简单了解一下在 shell 脚本中的 continue 和 break 与 C++/Java/Python 中的不同

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings

在 C++, Java, Python 中,都有 continue, break 用来提前结束循环,在 Shell 中也是有这个用法的,但是稍微有一些区别。

在 C++, Java, Python 中,continue 和 break 都只能跳出当前层次的循环,因此内层循环的 continue, break 对外层循环不起作用,而在 Shell 中,break 和 continue 是可以跳出多层循环的,这一点在使用中需要特别注意。

break

在 Shell 中,break 的写法如下

1
break n

其中 n 表示跳出循环的层数,省略的话,则跳出当前循环,也就是相当于 n 默认为 1。

例如打印一个 4 * 4 的矩阵,数字分别为 1 到 16,代码如下。可以看到 break 2 跳出外层循环,而默认的 break 跳出内层循环(相当于 break 1)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
i=0

while ((++i));
do
j=0;
while ((++j));
do
if (( i > 4 )); then
break 2 # 跳出外层循环
fi
if (( j > 4 )); then
break # 跳出内层循环
fi
printf "%-4d" $((i * j))
done
printf "\n"
done

continue

在 Shell 中,Continue 的写法如下

1
continue n

n 的含义与 break 一样,表示循环的层数,如果省略,则 continue 只对当前循环有效,相当于 n 默认为 1。

实例代码如下。可以看到 continue 2 会跳过内外层循环。

1
2
3
4
5
6
7
8
9
10
11
for (( i=4; i<=8; i++ ));
do
for (( j=4; j<=8; j++ ));
do
if (( i * j == 20 )); then
continue 2 # 跳过内外层循环
fi
printf "%d*%d=%-4d" ${i} ${j} $((i*j))
done
printf "\n"
done

Share