新聞中心

創(chuàng)新互聯(lián)公司是一家專業(yè)提供奉化企業(yè)網(wǎng)站建設,專注與網(wǎng)站制作、成都網(wǎng)站建設、H5建站、小程序制作等業(yè)務。10年已為奉化眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進行中。
在C語言、C++、C#、Python、Java 等大部分編程語言中,break 和 continue 只能跳出當前層次的循環(huán),內(nèi)層循環(huán)中的 break 和 continue 對外層循環(huán)不起作用;但是 Shell 中的 break 和 continue 卻能夠跳出多層循環(huán),也就是說,內(nèi)層循環(huán)中的 break 和 continue 能夠跳出外層循環(huán)。
在實際開發(fā)中,break 和 continue 一般只用來跳出當前層次的循環(huán),很少有需要跳出多層循環(huán)的情況。
break 關鍵字
Shell break 關鍵字的用法為:
break n
n 表示跳出循環(huán)的層數(shù),如果省略 n,則表示跳出當前的整個循環(huán)。break 關鍵字通常和 if 語句一起使用,即滿足條件時便跳出循環(huán)。
圖1:Shell break關鍵字原理示意圖
【實例1】不斷從終端讀取用戶輸入的正數(shù),求它們相加的和:
#!/bin/bash
sum=0
while read n; do
if((n>0)); then
((sum+=n))
else
break
fi
done
echo "sum=$sum"
運行結果:
10↙
20↙
30↙
0↙
sum=60
while 循環(huán)通過 read 命令的退出狀態(tài)來判斷循環(huán)條件是否成立,只有當按下 Ctrl+D 組合鍵(表示輸入結束)時,
read n才會判斷失敗,此時 while 循環(huán)終止。
除了按下 Ctrl+D 組合鍵,你還可以輸入一個小于等于零的整數(shù),這樣會執(zhí)行 break 語句來終止循環(huán)(跳出循環(huán))。
【實例2】使用 break 跳出雙層循環(huán)。
如果 break 后面不跟數(shù)字的話,表示跳出當前循環(huán),對于有兩層嵌套的循環(huán),就得使用兩個 break 關鍵字。例如,輸出一個 4*4 的矩陣:
#!/bin/bash
i=0
while ((++i)); do #外層循環(huán)
if((i>4)); then
break #跳出外層循環(huán)
fi
j=0;
while ((++j)); do #內(nèi)層循環(huán)
if((j>4)); then
break #跳出內(nèi)層循環(huán)
fi
printf "%-4d" $((i*j))
done
printf "\n"
done
運行結果:
1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16
當 j>4 成立時,執(zhí)行第二個 break,跳出內(nèi)層循環(huán);外層循環(huán)依然執(zhí)行,直到 i>4 成立,跳出外層循環(huán)。內(nèi)層循環(huán)共執(zhí)行了 4 次,外層循環(huán)共執(zhí)行了 1 次。
我們也可以在 break 后面跟一個數(shù)字,讓它一次性地跳出兩層循環(huán),請看下面的代碼:
#!/bin/bash
i=0
while ((++i)); do #外層循環(huán)
j=0;
while ((++j)); do #內(nèi)層循環(huán)
if((i>4)); then
break 2 #跳出內(nèi)外兩層循環(huán)
fi
if((j>4)); then
break #跳出內(nèi)層循環(huán)
fi
printf "%-4d" $((i*j))
done
printf "\n"
done
修改后的代碼將所有 break 都移到了內(nèi)層循環(huán)里面。讀者需要重點關注
break 2這條語句,它使得程序可以一次性跳出兩層循環(huán),也就是先跳出內(nèi)層循環(huán),再跳出外層循環(huán)。
continue 關鍵字
Shell continue 關鍵字的用法為:
continue n
n 表示循環(huán)的層數(shù):
- 如果省略 n,則表示 continue 只對當前層次的循環(huán)語句有效,遇到 continue 會跳過本次循環(huán),忽略本次循環(huán)的剩余代碼,直接進入下一次循環(huán)。
- 如果帶上 n,比如 n 的值為 2,那么 continue 對內(nèi)層和外層循環(huán)語句都有效,不但內(nèi)層會跳過本次循環(huán),外層也會跳過本次循環(huán),其效果相當于內(nèi)層循環(huán)和外層循環(huán)同時執(zhí)行了不帶 n 的 continue。這么說可能有點難以理解,稍后我們通過代碼來演示。
continue 關鍵字也通常和 if 語句一起使用,即滿足條件時便跳出循環(huán)。
圖2:Shell continue關鍵字原理示意圖
【實例1】不斷從終端讀取用戶輸入的 100 以內(nèi)的正數(shù),求它們的和:
#!/bin/bash
sum=0
while read n; do
if((n<1 || n>100)); then
continue
fi
((sum+=n))
done
echo "sum=$sum"
運行結果:
10↙
20↙
-1000↙
5↙
9999↙
25↙
sum=60
變量 sum 最終的值為 60,-1000 和 9999 并沒有計算在內(nèi),這是因為 -1000 和 9999 不在 1~100 的范圍內(nèi),if 判斷條件成立,所以執(zhí)行了 continue 語句,跳過了當次循環(huán),也就是跳過了
((sum+=n))這條語句。
注意,只有按下 Ctrl+D 組合鍵輸入才會結束,
read n才會判斷失敗,while 循環(huán)才會終止。
【實例2】使用 continue 跳出多層循環(huán),請看下面的代碼:
#!/bin/bash
for((i=1; i<=5; i++)); do
for((j=1; j<=5; j++)); do
if((i*j==12)); then
continue 2
fi
printf "%d*%d=%-4d" $i $j $((i*j))
done
printf "\n"
done
運行結果:
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
從運行結果可以看出,遇到
continue 2時,不但跳過了內(nèi)層 for 循環(huán),也跳過了外層 for 循環(huán)。
break 和 continue 的區(qū)別
break 用來結束所有循環(huán),循環(huán)語句不再有執(zhí)行的機會;continue 用來結束本次循環(huán),直接跳到下一次循環(huán),如果循環(huán)條件成立,還會繼續(xù)循環(huán)。
本文名稱:Shellbreak和continue跳出循環(huán)詳解
本文來源:http://www.dlmjj.cn/article/cccieep.html


咨詢
建站咨詢
