1. intruduction
exit 使shell(脚本)以指定状态值退出, 不带参数执行exit时,shell或脚本以最后执行命令的状态值退出。 shell退出前, trap会捕猎EXIT信号。0表示执行成功,非0值表执行失败。它经常用于判断语句和循环语句来控制程序和表达式的流程。
exit 使得编写脚本时可以自行设置退出时的状态值,使用$?引用,特定的退出状态值一般也会定义特定的退出含义。也可以用test来检查表达式的退出状态。
bash 所有builtin 命令都会在成功时返回状态0,失败时返回非0,所以它们可以用于条件命令和命令list中
exit status退出状态
执行某一函数,程序或命令后退出时,向父命令返回一个整数,这个称为退出状态。不带参数的exit,则退出状态为最后被执行命令的退出状态。父进程可以中可以用$?引用其值
判断语句和循环语句也会用到exit status内置命令来控制程序流程,用来返回给父进程一个status值且脚本退出,且返回值保存在$?中, status 用0~255 之间的数字表示,这样实现脚本主动控制返回值。
POSIX规定的几种退出状态
退出状态 |
|
0 |
运行成功 |
1~125 |
各种运行失败 |
126 |
找到命令,但无法执行 |
127 |
未找到运行的命令 |
>128 |
命令被系统强行结束 |
2. sysopsis
exit [status value]
status value 0~255 值保存在?变量中
3. eg
exit 退出shell,不改变$?的值
exit 1 退出shell, 且返回1
4. 比较return
exit是一个系统调用,用于在程序运行的过程中随时结束进程,它会删除进程占用的内存空间,并将status是返回给父进程,这个status通常用于标识程序的一些运行信息。
return是语言级别的一个关键字,它表示调用堆栈的返回,用于带一个status从函数退出。return不带参数时,则会返回函数体中最后一个命令的返回值。
return 也可以用于. (source) 方式(子shell)执行脚本时的返回,也可以返回指定的status 或者脚本中最后一个命令的exit status.
return 不用于函数体,也没有以.(source)方式执行脚本时,则会报错。
return会触发trap
所以正确的用法是将return 用于函数的返回,exit用于进程的退出。比如如果主函数调用子函数,在子函数里使用return会回到主函数中,但在子函数中误用exit则会直接退出进程。