Shell中exit和return的區(qū)別講解
1.exit命令
exit命令是Shell內(nèi)建命令,用于退出當(dāng)前Shell進(jìn)程。使用格式如下:
exit [<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)?,被轉(zhuǎn)換為0。狀態(tài)碼n可以不指定,默認(rèn)是上一條命令的退出狀態(tài)碼。
關(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>中對(duì)于狀態(tài)碼的定義。
#define EX_OK 0 /* successful termination */ #define EX__BASE 64 /* base value for error messages */ #define EX_USAGE 64 /* command line usage error */ #define EX_DATAERR 65 /* data format error */ #define EX_NOINPUT 66 /* cannot open input */ #define EX_NOUSER 67 /* addressee unknown */ #define EX_NOHOST 68 /* host name unknown */ #define EX_UNAVAILABLE 69 /* service unavailable */ #define EX_SOFTWARE 70 /* internal software error */ #define EX_OSERR 71 /* system error (e.g., can't fork) */ #define EX_OSFILE 72 /* critical OS file missing */ #define EX_CANTCREAT 73 /* can't create (user) output file */ #define EX_IOERR 74 /* input/output error */ #define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ #define EX_PROTOCOL 76 /* remote error in protocol */ #define EX_NOPERM 77 /* permission denied */ #define EX_CONFIG 78 /* configuration error */ #define EX__MAX 78 /* maximum listed value */
2.return關(guān)鍵字
return是語(yǔ)言級(jí)別的一個(gè)關(guān)鍵字,用于結(jié)束函數(shù)并返回一個(gè)結(jié)果。return不帶參數(shù)時(shí),則會(huì)返回函數(shù)體中最后一個(gè)命令的返回值。
return也可以用于使用 . 或source的方式包含的子Shell腳本中,可以返回指定的狀態(tài)或者腳本中最后一個(gè)命令的exit status。比如如下腳本:
#!/bin/bash if [ $# -ne 1 ] then echo "please input parameter" return 1 fi
上面的腳本如果直接執(zhí)行則會(huì)報(bào)如下錯(cuò)誤:
return: can only`return' from a function or sourced script
但是如果使用 . 或souce的方式被包含到父Shell中,則可以正常運(yùn)行。
3.exit與return的區(qū)別
- (1)作用不同。exit用于在程序運(yùn)行的過(guò)程中隨時(shí)結(jié)束程序,exit的參數(shù)是返回給OS的。exit是結(jié)束一個(gè)進(jìn)程,它將刪除進(jìn)程使用的內(nèi)存空間,同時(shí)把錯(cuò)誤信息返回父進(jìn)程。而return是返回函數(shù)值并退出函數(shù);
- (2)語(yǔ)義層級(jí)不同。return是語(yǔ)言級(jí)別的,它表示了調(diào)用堆棧的返回;而exit是系統(tǒng)調(diào)用級(jí)別的,它表示了一個(gè)進(jìn)程的結(jié)束;
- (3)使用方法不用。return一般用在函數(shù)方法體內(nèi),exit可以出現(xiàn)在Shell腳本中的任意位置。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
PowerShell實(shí)現(xiàn)簡(jiǎn)單的grep功能
下面的PS腳本針對(duì)目錄和文件進(jìn)行了區(qū)分,借用Select-String命令,實(shí)現(xiàn)了內(nèi)容查找,并顯示查找到的文件和匹配內(nèi)容所在行號(hào)。感興趣的朋友一起看看吧2017-10-10Linux服務(wù)器無(wú)法登陸問(wèn)題的解決方法
下面小編就為大家?guī)?lái)一篇Linux服務(wù)器無(wú)法登陸問(wèn)題的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03Linux下實(shí)現(xiàn)SNMP一鍵安裝的Shell腳本
這篇文章主要介紹了Linux下實(shí)現(xiàn)SNMP一鍵安裝的Shell腳本,非常實(shí)用,需要的朋友可以參考下2014-07-07Shell腳本中判斷輸入變量或者參數(shù)是否為空的方法
這篇文章主要介紹了Shell腳本中判斷輸入變量或者參數(shù)是否為空的方法,本文總結(jié)了5種方法,并分別給出了代碼實(shí)例,需要的朋友可以參考下2014-10-10一個(gè)監(jiān)控LINUX目錄和文件變化的Shell腳本分享
這篇文章主要介紹了一個(gè)監(jiān)控LINUX目錄和文件變化的Shell腳本分享,對(duì)服務(wù)器經(jīng)常被掛馬的朋友時(shí)分有用,需要的朋友可以參考下2014-09-09Shell腳本實(shí)現(xiàn)把進(jìn)程負(fù)載均衡到多核CPU中
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)把進(jìn)程負(fù)載均衡到多核CPU中,可以把進(jìn)程指定運(yùn)行在某個(gè)CPU中,需要的朋友可以參考下2014-06-06linux下定時(shí)執(zhí)行任務(wù)的方法及crontab 用法說(shuō)明(收集整理)
這篇文章主要介紹了 linux下定時(shí)執(zhí)行任務(wù)的方法及crontab 用法說(shuō)明(收集整理),需要的朋友可以參考下2017-04-04