1. 程式人生 > >break、continue、exit、return的區別和對比

break、continue、exit、return的區別和對比

-s pen ont for循環語句 bre 跳出循環 spl $* div

break、continue、exit、return的區別和對比

一:說明

break、continue在條件循環語句及循環語句(for、while、if等)中用於控制程序的走向;而exit則用於種植所有語句並退出當前腳本,除此之外,exit還可以返回上一級程序或命令的執行狀態值給當前shell;return類似於exit,只不過return僅用於在函數內部返回函數執行的狀態值。

break n

如果省略n,則表示跳出整個循環,n表示跳出循環的層數;

continue n

如果省略n,則表示跳出本次循環,忽略本次循環的剩余代碼,進入循環的下一次循環,n表示退到第n層繼續循環;

exit n

退出當前shell程序,n為上一次程序執行的狀態返回值。n也可以省略,在下一個shell裏可以通過"$?"接收exit n的n值;

return

用於在函數裏作為函數的返回值,以判斷函數執行是否正確,在下一個shell裏可以通過"$?"接收exit n的n值;

二、break、continue、exit功能執行流程圖

這裏以while循環和for循環為例來說明:

1、在循環中break功能的執行流程邏輯圖如下:

技術分享圖片

2、在循環中continue功能的執行流程邏輯圖:

技術分享圖片

3、在循環中exit功能的執行流程邏輯圖:

技術分享圖片

三、break、continue、exit、return命令的示例:

說明:通過break命令跳出整個循環,執行循環下面的其他程序。

#!/bin/bash

#通過break命令跳出整個循環,執行循環下面的其他程序;

技術分享圖片
1 if [ $# -ne 1 ];then    #如果傳參個數不為1,則打印下面的使用提示給用戶;
2 
3     echo $"usage:$0 {break|continue|exit|return}"    #分別傳入4個命令作為參數;
4 
5     exit 1    #退出腳本
6 
7 fi 
View Code

#定義測試函數;

技術分享圖片
 1 test(){
 2 
 3     for((i=0; i<=5; i++))
4 5 do 6 7 if [ $i -eq 3 ] ;then 8 9 $*; #$*是接收函數外的參數,將來就是{break|continue|exit|return}中的一個; 10 11 fi 12 13 echo $i 14 15 done 16 17 echo "I am in func." 18 19 } 20 21 22 23 test $* #這裏的$*為函數的傳參; 24 25 func_ret=$? #接收並測試函數返回值; 26 27 28 29 if [ `echo $*|grep return|wc -l` -eq 1 ] #如果傳參有return; 30 31 then 32 33 echo "return‘s exit status:$func_ret" #則提示return退出狀態; 34 35 fi 36 37 echo "ok" #函數外的輸出提示;
View Code

傳入break命令的執行結果為:

技術分享圖片
 1 [root@shell ~]# sh 12-1-1.sh
 2 
 3 usage:12-1-1.sh {break|continue|exit|return}
 4 
 5 [root@shell ~]# sh 12-1-1.sh break
 6 
 7 0
 8 
 9 1
10 
11 2
12 
13 I am in func.
14 
15 ok 
View Code

說明:i等於3及以後的循環沒有被執行,但循環外的echo執行了,執行到break時跳出了if及外層的for循環語句,然後執行for循環外部done後面的的打印OK的語句。

傳入continue命令的執行結果為:

技術分享圖片
 1 [root@shell ~]# sh 12-1-1.sh continue
 2 
 3 0
 4 
 5 1
 6 
 7 2
 8 
 9 4
10 
11 5
12 
13 I am in func.
14 
15 ok 
View Code

說明:只有i等於3這層循環沒有被執行,其他循環全部執行了,循環外的echo也執行了,說明執行到continue時,終止了本次循環,而繼續下一次的循環,直到循環正常結束,接著繼續執行了循環外外面的所有語句。

3傳入exit 119命令的執行結果為:

技術分享圖片
 1 [root@shell ~]# sh 12-1-1.sh "exit 119"
 2 
 3 0
 4 
 5 1
 6 
 7 2
 8 
 9 [root@shell ~]# echo $?
10 
11 119 
View Code

說明:當進入循環裏的if語句後遇到"exit 119"時,立刻退出程序,不但循環體3後面的數字沒有輸出,而for循環體done外面的echo函數和函數外的OK也沒有輸出,就直接退出了程序。另外,因程序退出指定了119,所以執行腳本後獲取"echo $?"的返回值就返回了"exit 119"後面的119這個數字到當前的shell。

傳入return 119命令的執行結果為:

技術分享圖片
 1 [root@shell ~]# sh 12-1-1.sh "return 119"
 2 
 3 0
 4 
 5 1
 6 
 7 2
 8 
 9 returns exit status:119
10 
11 ok
12 
13 [root@shell ~]# echo $?
14 
15 0 
View Code

說明:當進入循環裏的if語句後遇到return 119,就沒有打印3以下的數字,說明return跳出了循環體,程序也沒有執行for循環體done外的echo命令,而是直接執行了函數test外的if語句及打印OK的命令,可見return的作用是退出當前函數。同時,return將數字119作為函數的執行狀態值返還給函數體外,執行腳本後打印返回值是0,因為程序的最後一行是打印OK的命令,執行時成功的。

break、continue、exit、return的區別和對比