天天看點

linux 循環結構中的 break continue exit return差別

1 概述

在腳本的循環中,需要用到break,continue,exit.來控制循環。利用return來擷取函數的傳回值。本文将對這四個指令的使用做介紹

   break [n]:提前結束第n層循環,最内層為第1層

   continue [n]:提前結束第n層的本輪循環,而直接進入下一輪判斷;最内層為第1層

   exit 指令終止腳本

2  break continue exit   對比

2.1 break 和continue 測試

   假設一個循環體内,總共嵌套了3層循環,總循環體n為3,break 和continue要退出的層數為n

   為了友善做測試對比,将continue和break和exit都被寫入在最裡層的循環體内,即循環體1内

   最外層循環為3

   第二層循環為2

   最裡層循環為1

測試方法:一個一個測試,先注釋掉其他兩個

步驟一:測試break,則将continue和exit都注釋,依次增大break  n中n的數值,從1到n,n最終大于3

步驟二:測試continue,則将break,和exit都注釋,依次增大continue  n中n的數值,從1到n,n最終大于3

步驟三:對比步驟一和二的結果

測試結果如下,

   continue 1,結束這次的子循環條件,退出到同一層的循環,即1層來繼續下一個條件的循環

   break 1 結束這一層的循環,退出到上一層(3-1層),即第2層循環,繼續執行第2層循環的下一個條件的循環

   continue 2,這個條件等價于break 1

   break 2 結束兩層循環,退出到上一層的上一層循環(3-2層),即第1層循環,繼續執行第1層循環的下一個條件的循環

   continue 3,這個條件等價于break 2

   break 3,結束三層循環,即退出3個循環體,繼續往下執行循環體下面的腳本。

   注意,當退出的循環體的數量n大于3,此時得到的結果

   continue n 得到的結果和continue 3一樣;

   break n 得到的結果和break 3一樣;

  總結:n為所有循環體最外層層數,當退出循環的層數n為   1<n<n,continue n 等價于 break n-1,

  當n=1或者n=n;continue 和break 執行效果不一樣

  當n>n,其實沒有實際的執行效果,因為本身沒有那麼多層的循環體可以退出

 2.2 exit 測試

   exit x ;一旦執行到exit,則直接退出整個腳本的運作,這裡的x不作為退出層數,隻作為退出函數後$?的值

   如設定 

當循環執行到這個語句時,直接退出所有的腳本,而且此時$?的值為6

2.3 腳本

3 return

return這個是一個内置的指令,隻能在函數或者是執行  source  腳本 裡被識别

return後面必須是跟數字

3.1 測試函數裡的return n

當函數遇到return n 的時候,就會預設函數結束,而n的值就是整個函數執行結果的傳回值,這個傳回值如果是0,表示函數運作結果是正确的,如果是1-255表示執行的結果是錯誤的。

測試方法:通過調整return n的n值, n 範圍是[0,255]

結果如下:

當n=0,則調用函數get_version 後會執行代碼 { echo "\$?=$?;rrc1=$?"; }

當n != 0,則調用函數get_version 後會執行代碼 { echo "\$?=$?;wrc2=$?"; }

其中

rc1會把指派為0,因為此時的$?是執行獲得版本資訊os_version得到的傳回值,這個指令執行結果是正确的,是以傳回0值

rc2不會被指派,因為rc2前面已經有return n;函數執行到return n已經結束,是以rc2 不被指派

腳本如下:

3.2 測試source 腳本的return n

在執行  source  腳本 ,如果遇到 return n表示整個腳本執行結束,而n值作為腳本結束的傳回值

測試方法:通過注釋掉 os_version來檢視當腳本裡有沒有return n後面的語句是否會執行

當有return n的時候,return n後的指令不在被執行,說明已經退出腳本

當沒有return n的時候,return n後的指令依然被執行

4 總結

break和continue都是用來控制循環體

exit 直接退出腳本執行

return是用來傳回函數的執行結果

當用source 腳本 來執行腳本的時候,return會把識别,此時的return可以傳回整個腳本的執行結果

繼續閱讀