【shell】shell中 return 與 exit 的區(qū)別

1.exit 命令

exit 命令是 Shell 內(nèi)建命令琼掠,用于退出當(dāng)前 Shell 進(jìn)程喻奥。

使用格式如下:

可以指定退出狀態(tài) N汉买,N 的取值范圍是 0-255,一般情況下邻悬,0 表示正常退出症昏,非零表示異常退出。

如果狀態(tài)碼是 0-255 之外的數(shù)值父丰,則會(huì)被強(qiáng)制轉(zhuǎn)換為 uint8_t 類型的數(shù)值肝谭,比如 -1 會(huì)被轉(zhuǎn)換為 255,256 會(huì)發(fā)生類型寬度截?cái)喽晟龋晦D(zhuǎn)換為 0攘烛。

狀態(tài)碼 N 可以不指定,默認(rèn)是上一條命令的退出碼镀首。

關(guān)于狀態(tài)碼值的定義尚未有統(tǒng)一的標(biāo)準(zhǔn)坟漱,但是結(jié)束程序時(shí)隨意的指定一個(gè)狀態(tài)碼是一個(gè)不好的行為,應(yīng)該使用統(tǒng)一的狀態(tài)碼更哄。這樣便于調(diào)用者更具狀態(tài)碼快速粗略地推斷出被調(diào)的狀態(tài)芋齿,而不用去查找狀態(tài)碼的具體含義。當(dāng)然實(shí)際的狀態(tài)碼值可以自定義成翩,項(xiàng)目中統(tǒng)一即可觅捆,但還是推薦使用GNU C的頭文件 <sysexits.h> 中對狀態(tài)碼的定義。

2.return關(guān)鍵字

return是語言級別的一個(gè)關(guān)鍵字麻敌,用于結(jié)束函數(shù)并返回一個(gè)結(jié)果栅炒。return不帶參數(shù)時(shí),則會(huì)返回函數(shù)體中最后一個(gè)命令的返回值庸论。

return也可以用于使用 . 或source的方式包含的子Shell腳本中职辅,可以返回指定的狀態(tài)或者腳本中最后一個(gè)命令的exit status。

比如如下腳本:

上面的腳本如果直接執(zhí)行則會(huì)報(bào)如下錯(cuò)誤:

但是如果使用 . 或souce的方式被包含到父Shell中聂示,則可以正常運(yùn)行域携。


3.exit與return的區(qū)別


(1)作用不同。exit用于在程序運(yùn)行的過程中隨時(shí)結(jié)束程序鱼喉,exit的參數(shù)是返回給OS的秀鞭。exit是結(jié)束一個(gè)進(jìn)程,它將刪除進(jìn)程使用的內(nèi)存空間扛禽,同時(shí)把錯(cuò)誤信息返回父進(jìn)程锋边。而return是返回函數(shù)值并退出函數(shù);

(2)語義層級不同编曼。return是語言級別的豆巨,它表示了調(diào)用堆棧的返回;而exit是系統(tǒng)調(diào)用級別的掐场,它表示了一個(gè)進(jìn)程的結(jié)束往扔;

(3)使用方法不用入挣。return一般用在函數(shù)方法體內(nèi)奈偏,exit可以出現(xiàn)在Shell腳本中的任意位置布卡。


輸出的結(jié)果:


寫一個(gè)腳本擅羞, 創(chuàng)建一個(gè)函數(shù),能接兩個(gè)參數(shù):

1) 第一個(gè)參數(shù)為URL蝗罗,即可下載的文件艇棕;第二個(gè)參數(shù)為目錄,即下載后保存的位置

2) 如果用戶給的目錄不存在串塑,則提示用戶是否繼續(xù)沼琉,否則函數(shù)返回一個(gè)51的錯(cuò)誤值給調(diào)用腳本

3) 如果給的目錄存在則下載文件;下載命令執(zhí)行后測試文件下載是否成功桩匪,如果成功刺桃,則返回0給調(diào)用腳本,如果不成功則返回52


由此可以說明:

break n:n表示跳出循環(huán)的層數(shù)吸祟,如果省略n表示跳出整個(gè)循環(huán)

continue n:n表示退到第N層繼續(xù)循環(huán)瑟慈,如果省略N表示跳出本次循環(huán),忽略本次循環(huán)的剩余代碼屋匕,進(jìn)入循環(huán)的下一次循環(huán)

exit n:退出當(dāng)前shell程序 ?并返回N葛碧,N也可以省略

return:函數(shù)的返回值


4. 參考


Exit command Manual Pages?

https://bash.cyberciti.biz/guide/Exit_command


FreeBSD Manual Pages sysexits

https://www.freebsd.org/cgi/man.cgi?query=sysexits&sektion=3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市过吻,隨后出現(xiàn)的幾起案子进泼,更是在濱河造成了極大的恐慌,老刑警劉巖纤虽,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乳绕,死亡現(xiàn)場離奇詭異,居然都是意外死亡逼纸,警方通過查閱死者的電腦和手機(jī)洋措,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杰刽,“玉大人菠发,你說我怎么就攤上這事『厣” “怎么了滓鸠?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長第喳。 經(jīng)常有香客問我糜俗,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任悠抹,我火速辦了婚禮寞射,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锌钮。我一直安慰自己,他們只是感情好引矩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布梁丘。 她就那樣靜靜地躺著,像睡著了一般旺韭。 火紅的嫁衣襯著肌膚如雪氛谜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天区端,我揣著相機(jī)與錄音值漫,去河邊找鬼。 笑死织盼,一個(gè)胖子當(dāng)著我的面吹牛杨何,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沥邻,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼危虱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唐全?” 一聲冷哼從身側(cè)響起埃跷,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邮利,沒想到半個(gè)月后弥雹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡延届,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年剪勿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片方庭。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窗宦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出二鳄,到底是詐尸還是另有隱情赴涵,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布订讼,位于F島的核電站髓窜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寄纵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一鳖敷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧程拭,春花似錦定踱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恤浪,卻和暖如春畅哑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背水由。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工荠呐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砂客。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓泥张,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鞠值。 傳聞我的和親對象是個(gè)殘疾皇子圾结,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354