三、shell -break、continue、exit、return
阿新 • • 發佈:2020-10-23
一、shell -break、continue、exit、return
break(迴圈控制)、continue(迴圈控制)、exit(退出指令碼)、return(退出函式)。
1.break、continue在條件語句及迴圈語句(for、while、if等)中用於控制程式的走向;
2.exit則用於終止所有語句並退出當前指令碼,除此之外,exit還可以返回上一次程式或命令的執行狀態值給當前Shell;
3.return類似於exit,只不過return僅用於在函式內部
返回函式執行的狀態值。
for ((i=1;i<5;i++ )) do if [ $i -eq 3 ] then # break # continue # exit fi echo $i done echo OK
break輸出的結果
1
2
OK
continue輸出的結果
1
2
4
OK
exit輸出的結果
1
2
#!/bin/bash
dir=/root/shell
grep -e '^ .*cp ' -e '^cp' $dir/* >Cp_Check.txt
if [ ! -s Cp_Check.txt ]
then
return 0
fi
#直接執行指令碼是會報錯的,return僅用於函式中:
#return: can only`return' from a function or sourced script
總結return 與 exit的區別
1、exit用於在程式執行的過程中隨時結束程式,exit的引數是返回給OS的。exit是結束一個程序,它將刪除程序使用的記憶體空間,同時把錯誤資訊返回父程序。而return是返回函式值並退出函式
2、return是語言級別的,它表示了呼叫堆疊的返回;而exit是系統呼叫級別的,它表示了一個程序的結束。
二、附錄例程:
參考:https://www.cnblogs.com/moox/p/12886517.html
#!/bin/bash if [ $# -ne 1 ];then echo $"usage: $0 {break|continue|exit|return}" exit 1 fi function test(){ for((i=0;i<=5;i++)) do if [ $i -eq 3 ];then $*; fi echo $i done echo "I am in func" } test $* func_ret=$? if [ `echo $*|grep return|wc -l` -eq 1 ];then echo "return's exit status: $func_ret" fi echo "OK"
[root@zabbix 0513]# sh test.sh break
0
1
2
I am in func === 傳入break時,退出test函式,繼續順序執行test函式以下的
OK
[root@zabbix 0513]# sh test.sh continue
0
1
2 ===下面沒有3,直接跳過了
4
5
I am in func
OK
[root@zabbix 0513]# sh break.sh "exit 119"
0
1
2 === 直接退出shell
[root@zabbix 0513]# echo $?
119 === 返回了119,即傳入的值
[root@zabbix 0513]# sh break.sh "return 119"
0
1
2
return's exit status: 119
OK