shell中exit 0和exit 1的區(qū)別有哪些
定義
exit 0 :正常運(yùn)行程序并退出程序。使用
echo $?
返回0,也就是說調(diào)用環(huán)境認(rèn)為你的程序執(zhí)行正常。exit 1 :非正常運(yùn)行導(dǎo)致退出程序,也可以是其他數(shù)字。系統(tǒng)程序?qū)τ诔绦蜻\(yùn)行錯(cuò)誤是有約定含義的,不為 0 就表示程序運(yùn)行出錯(cuò)。調(diào)用環(huán)境根據(jù)這個(gè)返回值,判斷你的程序運(yùn)行是否正常。
return :用于返回值。若在主函數(shù)中,則會退出函數(shù)并返回一個(gè)值。
區(qū)別
return是一個(gè)關(guān)鍵字; exit 是一個(gè)函數(shù)
return是編程語言級別,它表示調(diào)用堆棧的返回;exit是系統(tǒng)調(diào)用級別,它表示了一個(gè)進(jìn)程的結(jié)束
return是函數(shù)的退出(返回);exit是進(jìn)程的退出
return是編程語言提供,exit是操作系統(tǒng)提供(或者函數(shù)庫中給出)
return用于結(jié)束一個(gè)函數(shù)的執(zhí)行,將函數(shù)的執(zhí)行信息傳出個(gè)其他調(diào)用函數(shù)使用;exit用于退出應(yīng)用程序,刪除進(jìn)程使用的內(nèi)存空間,并將應(yīng)用程序的一個(gè)狀態(tài)返回給OS,這個(gè)狀態(tài)標(biāo)識了應(yīng)用程序的一些運(yùn)行信息,這個(gè)信息和操作系統(tǒng)有關(guān),一般 0 為正常退出,非0 為異常退出
非主函數(shù)中調(diào)用return和exit效果很明顯,但是在main函數(shù)中調(diào)用return和exit的現(xiàn)象就很模糊,多數(shù)情況下現(xiàn)象都是一致的
用途
如果你使用腳本 a.sh 調(diào)用腳本 b.sh ,在 a.sh 中判斷 b.sh 是否正常返回,需要在 b.sh 中相關(guān)位置采用 exit 0
或 exit 1
來標(biāo)識。執(zhí)行完a.sh后,使用echo $?
判斷返回值。
在 shell 編程中,要慎用 exit 0
。首先必須弄清楚 exit 0
不是 return 0
, 區(qū)別在于 return 0
用于函數(shù)中,表示函數(shù)執(zhí)行成功并返回 0;而 exit 0
則表示當(dāng)前程序執(zhí)行成功并且直接退出當(dāng)前執(zhí)行腳本或程序。相反,return -1
表示函數(shù)執(zhí)行失敗返回錯(cuò)誤; exit 1
(或大于 1)表示程序執(zhí)行失敗并退出程序。exit
用來返回進(jìn)程結(jié)束時(shí)的狀態(tài),一般在父shell中使用變量 $?
來獲取子shell 的退出狀態(tài),判斷子shell是否執(zhí)行成功。
雖然兩者區(qū)別很明顯,也很容易理解,為什么專門要做一下記錄?確實(shí)出現(xiàn)了這樣的一個(gè)錯(cuò)誤,本應(yīng)是在子shell中執(zhí)行使用 exit 0 和 exit 1 的函數(shù)接口,父shell對其進(jìn)程返回值 { $? } 做判斷操作,結(jié)果有人直接在環(huán)境腳本中加了該函數(shù)接口做判斷,結(jié)果直接導(dǎo)致環(huán)境部署失敗。
注:在接口函數(shù)中使用 return,在需要退出執(zhí)行(子 shell)程序時(shí)使用 exit
#/bin/bash function check_extern_input() { read param if [ "${param}" == "exit 0" ];then echo "successful exit process right now!" exit 0 elif [ "${param}" == "exit 1" ];then echo "failed exit process right now!" exit 1 elif [ "${param}" == "return 0" ];then echo "func normal return, process not exit, Enter go on..." return 0 else echo "Input again:" fi } while true ; do check_extern_input done
到此這篇關(guān)于shell中exit 0和exit 1有哪些區(qū)別的文章就介紹到這了,更多相關(guān)shell exit 0和exit 1內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell腳本中執(zhí)行python腳本并接收其返回值的例子
這篇文章主要介紹了shell腳本中執(zhí)行python腳本并接收其返回值的例子,本文重點(diǎn)在于如何接收python腳本的返回值,需要的朋友可以參考下2014-08-08數(shù)據(jù)結(jié)構(gòu) 二叉樹的遞歸與非遞歸
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu) 二叉樹的遞歸與非遞歸的相關(guān)資料,需要的朋友可以參考下2017-05-05Linux 編程之進(jìn)程fork()詳解及實(shí)例
這篇文章主要介紹了Linux 編程之進(jìn)程fork()詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03Linux Shell 數(shù)組的創(chuàng)建及使用技巧
這篇文章主要介紹了Linux Shell 數(shù)組的創(chuàng)建及使用技巧,本文講解了數(shù)組定義、數(shù)組讀取與賦值以及特殊使用,需要的朋友可以參考下2015-07-07