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