break、continue、exit、return的區別和對比
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 return‘s 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的區別和對比