在Shell脚本中,往往会遇到一些判断类型为某个值不符合预期值的时候就退出主脚本/当前脚本/当前函数,那么Exitreturn的用法与区别是什么呢?

下面先使用Exit举个简单例子,脚本内容如下

#!/bin/bash
if [[ "$1" == "1" ]];then
  echo "your input is $1"
else
  echo '退出'
  exit 0
fi
echo '最后一句'

第一种执行方法:

  使用Shell解析器进行调用,结果如下

首先是BASH

然后是sh

接着是dash

从上面的反馈结果来看,三个Shell解析器只有BASH能够无报错的执行完成,其他的则会提示语法错误,所以从这点可以看出:

虽然都是Shell解析器,但是他们都有自己的标准,在大体上保持一致,但是某些细节上则会出现差异。

那么下面继续见证另外三种执行方法

第一种:.

第二种:source

第三种:./

从上面所有案例可以得出一个不够严谨的结论(因为当前终端默认解析器就是BASH),所以出现了解析器调用法的时候,只有BASH能完美解析脚本,其他解析器都水土不服。

在后面三种执行方法中,全部都顺利完成解析,但是这并不代表它们都一样,下面开始演示它们的区别(脚本内容增加一段)。

下面的演示需要关注的重点是当前用户,具体请看演示:

脚本内容更新如下:

当前用户如下:

开始演示,下面的演示与之前演示的区别在于第一参数的改变。

第一个,依旧是BASH调用

从反馈结果看,此时用户名变量不变

然后跳过其他Shell解析器调用的测试,直接从.开始

这时候可以看出,使用.的时候,遇到Exit的指令时,该指令会直接应用到当前终端环境,相当于在当前终端执行EXit的指令,接下来继续看其他方式

结果依旧,然后继续使用./的方式

这时候,结果与BASH解析器调用的结果一致,那么从这个结果中我们又可以得出一个结论:

当脚本作为解析器调用文件的时候,此时整个脚本内容产生的效果之后应用于解析器调用的进程里,而不是当前终端环境,当使用source和一个.的方法执行的时候,脚本内容会直接对当前终端生效,而不是某个应用进程。虽然这是一个小小的区别,但却是一个非常实用的功能。

最新文章

  1. [深度优先搜索] POJ 1426 Find The Multiple
  2. $.post 请求一直转圈圈,谷歌浏览器状态一直为canceled
  3. android选择时间攻略
  4. 【Hadoop】Hive HSQ 使用 && 自定义HQL函数
  5. 【C#学习笔记】窗口隐藏、最小化、最大化、正常化
  6. php入门变量之数字
  7. TFS源代码管理
  8. python基础(三)
  9. 曾经让我很吐血的Bug(初学者)
  10. 201521123093 java 第三周学习总结
  11. Linux指令--grep
  12. ASLP Kaldi
  13. 【转】win中IDLE选择virtualenv的启动方法
  14. Kubenets 调试cronjob
  15. java 同步代码块与同步方法
  16. 02-线性结构4 Pop Sequence (25 分)
  17. MySQL 5.7.21 免安装版配置教程
  18. leetcode || 64、Minimum Path Sum
  19. JVM 深入浅出
  20. D. Magic Gems(矩阵快速幂 || 无敌杜教)

热门文章

  1. linux 域名
  2. 2. react 简书 头部(header) 图标添加
  3. CLion的使用
  4. 如何在PHP中进行会话处理?
  5. cmd命令打开本地*.db数据文件的一些坑
  6. Django(七)模型:字段属性、字段选项(参数)
  7. OI生涯回顾
  8. bzoj 2796: [Poi2012]Fibonacci Representation
  9. PHP-文件目录操作
  10. .NET via C#笔记17——委托