Linux命令之exit - 退出当前shell【返回值状态】

原文链接:http://codingstandards.iteye.com/blog/836625   (转载请注明出处)

用途说明

exit命令用于退出当前shell,在shell脚本中可以终止当前脚本执行。

常用参数

格式:exit n

退出。设置退出码为n。(Cause the shell to exit with a status of n.)

格式:exit

退出。退出码不变,即为最后一个命令的退出码。(If n is omitted, the exit status is that of the  last  command executed. )

格式:$?

上一个命令的退出码。

格式:trap "commands" EXIT

退出时执行commands指定的命令。( A trap on EXIT is executed before the shell terminates.)

退出码(exit status,或exit code)的约定:

0表示成功(Zero - Success)

非0表示失败(Non-Zero  - Failure)

2表示用法不当(Incorrect Usage)

127表示命令没有找到(Command Not Found)

126表示不是可执行的(Not an executable)

>=128 信号产生

man 3 exit 写道

The C standard specifies two constants, EXIT_SUCCESS and EXIT_FAILURE, that may be passed to exit() to indicate        successful or unsuccessful termination, respectively.

以下摘自/usr/include/stdlib.h

C代码

  1. #define EXIT_FAILURE    1       /* Failing exit status.  */
  2. #define EXIT_SUCCESS    0       /* Successful exit status.  */
#define EXIT_FAILURE    1       /* Failing exit status.  */
#define EXIT_SUCCESS    0       /* Successful exit status.  */

BSD试图对退出码标准化。

man 3 exit 写道

BSD has attempted to standardize exit codes; see the file <sysexits.h>.

以下摘自/usr/include/sysexits.h

C代码

  1. #define EX_OK           0       /* successful termination */
  2. #define EX__BASE        64      /* base value for error messages */
  3. #define EX_USAGE        64      /* command line usage error */
  4. #define EX_DATAERR      65      /* data format error */
  5. #define EX_NOINPUT      66      /* cannot open input */
  6. #define EX_NOUSER       67      /* addressee unknown */
  7. #define EX_NOHOST       68      /* host name unknown */
  8. #define EX_UNAVAILABLE  69      /* service unavailable */
  9. #define EX_SOFTWARE     70      /* internal software error */
  10. #define EX_OSERR        71      /* system error (e.g., can‘t fork) */
  11. #define EX_OSFILE       72      /* critical OS file missing */
  12. #define EX_CANTCREAT    73      /* can‘t create (user) output file */
  13. #define EX_IOERR        74      /* input/output error */
  14. #define EX_TEMPFAIL     75      /* temp failure; user is invited to retry */
  15. #define EX_PROTOCOL     76      /* remote error in protocol */
  16. #define EX_NOPERM       77      /* permission denied */
  17. #define EX_CONFIG       78      /* configuration error */
  18. #define EX__MAX 78      /* maximum listed value */
#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 */

使用示例

示例一 退出当前shell

[[email protected] ~]# [[email protected] ~]# exit logout

示例二 在脚本中,进入脚本所在目录,否则退出

Bash代码

  1. cd $(dirname $0) || exit 1
cd $(dirname $0) || exit 1

示例三 在脚本中,判断参数数量,不匹配就打印使用方式,退出

Bash代码

  1. if [ "$#" -ne "2" ]; then
  2. echo "usage: $0 <area> <hours>"
  3. exit 2
  4. fi
if [ "$#" -ne "2" ]; then
    echo "usage: $0 <area> <hours>"
    exit 2
fi

示例四 在脚本中,退出时删除临时文件

Bash代码

  1. trap "rm -f tmpfile; echo Bye." EXIT
trap "rm -f tmpfile; echo Bye." EXIT

示例五 检查上一命令的退出码

Bash代码

  1. ./mycommand.sh
  2. EXCODE=$?
  3. if [ "$EXCODE" == "0" ]; then
  4. echo "O.K"
  5. fi
./mycommand.sh
EXCODE=$?
if [ "$EXCODE" == "0" ]; then
    echo "O.K"
fi

问题思考

相关资料

【1】91linux    Linux exit 命令    【2】曲径通幽   [概念]exit n    【3】Linux大学  Bash Shell Exit Status Tutorial with Practical Examples

时间: 2024-10-31 01:24:46

Linux命令之exit - 退出当前shell【返回值状态】的相关文章

linux shell 和linux 命令的区别?windows shell 和 windows 命令呢?

shell翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面. shell可以通过其条件语句和循环语句等,把一系列linux命令结合在一起,形成一个相当于面向过程的程序,shell script,来实现一些较为复杂的功能.总括,shell是linux命令集的概称,是属于命令行的人机界面.Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这

Linux命令行–基本的bash shell命令

启动shell: /etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 用户名 用户密码 用户的系统UID 用户的系统GID 用户的全名 用户的默认主目录 用户的默认shell程序 如:zmcheng:x:501:501:zhangmingcheng:/home/zmcheng:/bin/bash 默认情况下,bash shell启动时会自动处理用户主目录下.bashrc文件中的命令 shell 提示符: PS1:控制默认命令行提示符的格

bat 获取命令执行后的多个返回值,并取最后一个

最近在使用bat,遇到了这样的问题,获取adb shell cat命令之后的所有返回值,查了很长时间,才找到,现分享给大家. 举例如下: @for /f "tokens=*" %%i in ('adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies') do @set vars=%%i @echo All cpufreqs are: %var% @for %%A in (%var%

c++ linux 下汇编分析传参以及返回值

注意:都是在没有优化的情况下编译的.因为只要开-O1或是-O2,那么汇编代码就少的可怜了,都被优化掉了 编译器版本:x86-64 gcc 5.5 1 POD类型传参 1.1 一个pod参数,pod返回值 int square(int num) { return num * num; } int main() { int c=90; int a=square(c); ++a; } 对应汇编 1.2 两个pod参数,pod返回值 int mul(int v1,int v2) { return v1

MFC的EXE调用VBS,并获取VBS的返回值状态码

VBS代码: Dim ageage = 21WScript.Quit age MFC的EXE代码: //获取EXE同目录下的VBS文件 TCHAR szExeSelfPath[_MAX_PATH] = {0}; ::GetModuleFileName(NULL,szExeSelfPath,_MAX_PATH); CString strExeSelfPath = szExeSelfPath; strExeSelfPath = strExeSelfPath.Left(strExeSelfPath.R

常见linux命令释义(第六天)——shell环境变量

太懒了,这几天好像得了懒癌,一点都不想写博客.后来想想,知识嘛,还是分享出来的好.第一治自己的懒癌:第二顺便巩固下自己的知识. Linux的变量分为两种,一种是系统变量,是系统一经启动,就写进内存中的变量.在各个进程.以及子进程中都可以调用得到. 一种是自己设置的变量,关机后再开机就挂了,或者切去下个进程,就找不到变量了.这个是局部变量. 以上两种变量,第五天的时候有详细的讲述过,这里就不赘述了. 查看环境变量有个命令:env   env是environment[环境] 的意思. 这个里面有一些

linux 命令 创建 Django 项目 使用路由返回首页界面

1.首先使用cd 命令进入创建的项目文件夹 2.使用django-admin startproject web  命令创建一个名字为web的项目 3.使用python3 manage.py startapp myhome 命令创一个名字为myhome的App应用 4.在 manage.py 的同级目录下创建返回的模板(html界面)使用 mkdir templates 5.编辑settings.py,这里我个人使用的时sublime 打开的,命令是 subl settings.py 6.找到se

linux 下 php执行 exec 无反应 返回值为空

ps:请先确保 php.ini 的disable_functions 配置没有拦截  exec ,有请删掉,保存,重启php -------------------------------------------------------------------下面开始正文1.先找出是哪个用户在执行这个文件的 <?php$result = exec("whoami", $outcome, $status); var_dump($outcome); 我的是输出为 www 也有可能是

expect实现自动scp和ssh登录后执行命令,并向bash提供返回值

#!/bin/bash # 全局变量:用户名,普通用户密码,root密码 loginname="icgsu" userpwd="netentsec" rootpwd="netentsec" # 读取iplist cat /root/iplist | while read line do ip=($line) # scp脚本及ssh登录执行 /usr/bin/expect<<EOF set timeout 10 spawn scp /r