1. 程式人生 > 實用技巧 >三、shell -break、continue、exit、return

三、shell -break、continue、exit、return

一、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