佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Shell中exit和return的區(qū)別講解

Shell中exit和return的區(qū)別講解

熱門標(biāo)簽:服務(wù)外包 鐵路電話系統(tǒng) 呼叫中心市場(chǎng)需求 網(wǎng)站排名優(yōu)化 地方門戶網(wǎng)站 AI電銷 百度競(jìng)價(jià)排名 Linux服務(wù)器

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)鏈接

您可能感興趣的文章:
  • 在Shell腳本中調(diào)用另一個(gè)腳本的三種方式講解
  • 使用shell腳本來(lái)給mysql加索引的方法
  • 干掉一堆mysql數(shù)據(jù)庫(kù),僅需這樣一個(gè)shell腳本(推薦)
  • linux shell之通過(guò)標(biāo)識(shí)測(cè)試文件系統(tǒng)屬性的方法示例
  • linux shell中if的各種判斷
  • linux shell之pushd、popd和dirs的使用講解
  • linux shell之控制臺(tái)打印各種顏色字體和背景的實(shí)現(xiàn)方法
  • shell腳本實(shí)現(xiàn)監(jiān)控某個(gè)進(jìn)程意外停止后拉起進(jìn)程
  • 使用shell腳本每天對(duì)MySQL多個(gè)數(shù)據(jù)庫(kù)自動(dòng)備份的講解
  • 使用shell來(lái)發(fā)tcp包的方法

標(biāo)簽:銅川 湖南 仙桃 蘭州 崇左 湘潭 衡水 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Shell中exit和return的區(qū)別講解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    泾阳县| 保靖县| 金湖县| 剑河县| 日土县| 平利县| 米泉市| 榆林市| 三穗县| 恩施市| 天台县| 建宁县| 遵化市| 安岳县| 湘潭市| 黑山县| 老河口市| 丹阳市| 波密县| 九龙城区| 新建县| 兴国县| 龙门县| 永川市| 延安市| 石景山区| 鲁甸县| 施甸县| 丰都县| 雅江县| 同仁县| 志丹县| 满城县| 松原市| 弥勒县| 府谷县| 沙坪坝区| 青田县| 隆林| 池州市| 双流县|