shell脚本:exit 0 和 exit 1有什么区别?他们和return不同,return是关键字,exit是一个shell函数

博客介绍了在Shell脚本中,exit0和exit1的使用场景和区别。exit0表示程序正常退出,常用于标记脚本执行成功;exit1则表示程序遇到错误退出,通常用于指示脚本执行失败。return则用于函数中,表示函数执行完毕并返回一个值。在使用脚本时,可以通过检查$?变量来判断子脚本的退出状态。误用exit0和exit1可能导致程序流程控制错误,因此在编写脚本时需谨慎处理。
摘要由CSDN通过智能技术生成

定义

  • exit 0 :正常运行程序并退出程序。使用echo $? 返回0,也就是说调用环境认为你的程序执行正常。

  • exit 1 :非正常运行导致退出程序,也可以是其他数字。系统程序对于程序运行错误是有约定含义的,不为 0 就表示程序运行出错。调用环境根据这个返回值,判断你的程序运行是否正常。

  • return :用于返回值。若在主函数中,则会退出函数并返回一个值。

区别

  • return是一个关键字; exit 是一个函数

  • return是编程语言级别,它表示调用堆栈的返回;exit是系统调用级别,它表示了一个进程的结束

  • return是函数的退出(返回);exit是进程的退出

  • return是编程语言提供,exit是操作系统提供(或者函数库中给出)

  • return用于结束一个函数的执行,将函数的执行信息传出个其他调用函数使用;exit用于退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息,这个信息和操作系统有关,一般 0 为正常退出,非0 为异常退出

  • 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的

用途

如果你使用脚本 a.sh 调用脚本 b.sh ,在 a.sh 中判断 b.sh 是否正常返回,需要在 b.sh 中相关位置采用 exit 0 或 exit 1 来标识。执行完a.sh后,使用echo $?判断返回值。

在 shell 编程中,要慎用 exit 0。首先必须弄清楚 exit 0 不是 return 0, 区别在于 return 0用于函数中,表示函数执行成功并返回 0;而 exit 0 则表示当前程序执行成功并且直接退出当前执行脚本或程序。相反,return -1 表示函数执行失败返回错误; exit 1 (或大于 1)表示程序执行失败并退出程序。exit 用来返回进程结束时的状态,一般在父shell中使用变量 $? 来获取子shell 的退出状态,判断子shell是否执行成功。

虽然两者区别很明显,也很容易理解,为什么专门要做一下记录?确实出现了这样的一个错误,本应是在子shell中执行使用 exit 0 和 exit 1 的函数接口,父shell对其进程返回值 { $? } 做判断操作,结果有人直接在环境脚本中加了该函数接口做判断,结果直接导致环境部署失败。

注:在接口函数中使用 return,在需要退出执行(子 shell)程序时使用 exit

#/bin/bash

function check_extern_input() {
	read param
	if [ "${param}" == "exit 0" ];then
		echo "successful exit process right now!"
		exit 0
	elif [ "${param}" == "exit 1" ];then
		echo "failed exit process right now!"
		exit 1
	elif [ "${param}" == "return 0" ];then
		echo "func normal return, process not exit, Enter go on..."
		return 0
	else
		echo "Input again:"
	fi		
}

while true ; do
	check_extern_input
done

shell脚本:exit 0 和 exit 1有什么区别?_Locutus的博客-CSDN博客_shell中exit1和exit0的区别 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值