一篇部落格厘清shell中的狀态傳回值-return-break-continue-exit
一、break、continue、exit、return的差別和對比
條件與循環控制及程式傳回值指令知識表
指令
說明
break n
如果省略n,則表示跳出整個循環,n表示跳出循環的層數
continue n
如果省略n,則表示跳出本次循環,忽略本次循環剩餘代碼,進入循環的下一次循環。n表示退到第n層繼續循環
exit n
表示退出目前shell程式,n為上一次程式執行的狀态傳回值,n也可以省略,在下一個shell裡可以通過“$?”接收exit n的n值。
return n
用于在函數裡作為函數的傳回值,以判斷函數執行是否正确,在下一個shell裡可通過“$?”接收exit n的n值
二、break、continue、exit功能執行流程圖
1、在循環中break功能的執行流程邏輯圖
<a href="https://s3.51cto.com/wyfs02/M00/9D/76/wKioL1mAZC7BCACTAABfUCx4vyc192.png" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M01/9D/76/wKiom1mAZC6iNRXEAABepFOOimA055.png" target="_blank"></a>
2、在循環中bcontinue功能的執行流程邏輯圖
<a href="https://s5.51cto.com/wyfs02/M01/9D/76/wKioL1mAZEPQQVeoAABfsEAdVjk688.png" target="_blank"></a>
3、在循環中exit功能的執行流程邏輯圖
<a href="https://s4.51cto.com/wyfs02/M00/9D/76/wKioL1mAZFLT3LpqAABptYgH8TE585.png" target="_blank"></a>
<a href="https://s4.51cto.com/wyfs02/M01/9D/76/wKiom1mAZFLRQ_DtAABqMx-WLA8644.png" target="_blank"></a>
三、用一個小腳本區分break、continue、exit、return
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<code>[root@xuegod63 ~]</code><code># vim 3.sh </code>
<code>#!/bin/bash</code>
<code>#</code>
<code>#User : Mobanche</code>
<code>#Date : 2017-8-1</code>
<code>#Description :This shell script is used primarily to identify the state </code>
<code># return value of a loop control that is distinguished from </code>
<code># the return-break-continue-exit</code>
<code> </code>
<code>if</code> <code>[ $</code><code># -ne 1 ]</code>
<code>then</code>
<code> </code><code>echo</code> <code>"usage: {conntiue|break|exit|return}"</code>
<code> </code><code>exit</code> <code>1</code>
<code>fi</code>
<code>test</code> <code>() {</code>
<code> </code><code>for</code> <code>((i=1;i<=5;i++))</code>
<code> </code><code>do</code>
<code> </code><code>if</code> <code>[ $i -</code><code>eq</code> <code>3 ]</code>
<code> </code><code>then</code>
<code> </code><code>$*</code>
<code> </code><code>fi</code>
<code> </code><code>echo</code> <code>$i</code>
<code> </code><code>done</code>
<code> </code><code>echo</code> <code>"I am function"</code>
<code>}</code>
<code>test</code> <code>$*</code>
<code>func_ret=$?</code>
<code>if</code> <code>[ `</code><code>echo</code> <code>$*|</code><code>grep</code> <code>return</code><code>|</code><code>wc</code> <code>-l` -</code><code>eq</code> <code>1 ]</code>
<code> </code><code>echo</code> <code>"return's exit status :$func_ret"</code>
<code>echo</code> <code>OK</code>
測試:
本文轉自 于學康 51CTO部落格,原文連結:http://blog.51cto.com/blxueyuan/1952770,如需轉載請自行聯系原作者