定义

  • 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/bashfunction check_extern_input() {read paramif [ "${param}" == "exit 0" ];thenecho "successful exit process right now!"exit 0elif [ "${param}" == "exit 1" ];thenecho "failed exit process right now!"exit 1elif [ "${param}" == "return 0" ];thenecho "func normal return, process not exit, Enter go on..."return 0elseecho "Input again:"fi
}while true ; docheck_extern_input
done

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

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

  1. Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义以及linux命令执行返回值代表意义

    Shell脚本中$0.$?.$!.$$.$*.$#.$@等的意义以及linux命令执行返回值意义 (1) Shell脚本中$0.$?.$!.$$.$*.$#.$@等的意义说明 1.1.简要说明 ps: ...

  2. linux 脚本$字符,一文看懂shell脚本中$0 $1 $# $@ $* $? $$ 的各种符号意义

    概述 shell中有两类字符,一类是普通字符,在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本:另一类即元字符,是Shell的保留字符,在Shell中有着特殊的含义. 今天主要介绍一下 ...

  3. Linux学习总结(67)——shell脚本中$0 $1 $# $@ $* $? $ 等总结

    $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示 ...

  4. shell脚本中$0,$1,$2的含义

    我们经常见到shell脚本中使用的$0,$1,$2,分别的意思就是: $0:是指你所写的shell脚本本身的名字: $1:是指你写的shell脚本所传入的第一个参数 : $2:是指你写的shell脚本 ...

  5. linux命令和shell语言的区别,shell脚本语言与linux命令的联系与区别

    使用linux确定是要会使用命令的,就算提供有用户界面,绝大部分功能仍是要经过命令行去操做的.而shell脚本语言也是运行在linux上的脚本语言,对于服务器运维人员也是几乎必需要掌握的.而shell ...

  6. Shell脚本中$0、$?、$!、$$、$*、$#、$@

    1. $$ Shell本身的PID(ProcessID) 2. $! Shell最后运行的后台Process的PID 3. $? 最后运行的命令的结束代码(返回值) 4. $- 使用Set命令设定的F ...

  7. shell脚本头,#!/bin/sh与#!/bin/bash的区别.

    因为今天写了个小脚本,死活不成功,总是报文件或者目录不存在,问了一下我们马同学的正常写法,发现只有脚本头的区别,也就是今天本文要讲的#!/bin/sh与#!/bin/bash. 本文参考:https: ...

  8. shell脚本的基础知识

    shell脚本的基础知识 1 什么是shell 2 shell脚本的意义 3 如何创建shell脚本 4 如何执行shell脚本 5如何对脚本脚本进行调试 6 脚本练习 1 什么是shell shel ...

  9. 【C语言】exit(0)与exit(1)有什么区别

    C语言中_exit(),exit(0)与exit(1)有什么区别? 今天天气有点冷,当我在写消息队列的程序的时候,遇到了结束进程的这个问题,突然脑海里有点混乱,我是用_exit(),还是用exit(1 ...

  10. C语言中exit(0)与exit(1)的区别

    C语言中_exit(),exit(0)与exit(1)有什么区别 今天天气有点冷,当我在写消息队列的程序的时候,遇到了结束进程的这个问题,突然脑海里有点混乱,我是用_exit(),还是用exit(1) ...

最新文章

  1. 软件测试2019:第二次作业
  2. Py:Python实现好莱坞《黑客》影视中珠帘似吊炸天的华丽动态加密页面
  3. Spring boot修改静态资源映射
  4. Delphi编写后台监控软件
  5. 诊断SQLSERVER问题常用的日志
  6. mysql数据库的多实例_MySQL数据库多实例应用实战 - 橙子柠檬's Blog
  7. Codeforece E. Anton and Permutation
  8. 斯坦福大学CS143编译原理课程笔记:2.编译器结构
  9. About 产量数据选取问题
  10. 【kali】kali2020.2安装 超级详细教程
  11. 学习笔记(03):ArcGIS10.X入门实战视频教程(GIS思维)-坐标系与地理坐标系
  12. 手把手教你配置苹果APNS推送服务
  13. 关于STM32F4xx的GPIO
  14. 年产2万吨山楂酒工厂的设计-发酵工段及车间的设计(lunwen+任务书+cad图纸)
  15. Delphi 取得 iOS 辅助使用里的字型大小
  16. sql常用操作(含指定位置添加字段、修改到指定位置后等)
  17. linux下phy接光模块,C6638,linux mac to mac 模式(没PHY),接SFP+模块,通过光纤(30cm)与PC连接。在PC显示该网络链路为10Gbps,网口问题...
  18. Java屏幕截图低分辨率问题解决
  19. 智能宠物喂食器方案软硬件设计
  20. 项目上有个红色感叹号

热门文章

  1. 如何解决java中的安全问题_如何解决java中“使用了未经检查或不安全的操作 请使用 -Xlint:unchecked 重新编译 ”的问题...
  2. 数据清洗的几种常用手段
  3. 实验1 系统响应及系统稳定性
  4. 谈谈C++中的swap函数
  5. 客户端与服务端的区别
  6. 蓝桥杯嵌入式设计与开发历届客观题答案
  7. PT-RS for PUSCH
  8. 神州数码交换机CS6200命令(一)
  9. 感觉自己成长慢,单点突破可以让你成长快10倍
  10. 基础开始——审计aduit