Shell脚本exit用法与区别
在Shell脚本中,往往会遇到一些判断类型为某个值不符合预期值的时候就退出主脚本/当前脚本/当前函数,那么Exit与return的用法与区别是什么呢?
下面先使用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和一个.的方法执行的时候,脚本内容会直接对当前终端生效,而不是某个应用进程。虽然这是一个小小的区别,但却是一个非常实用的功能。
Shell脚本exit用法与区别的更多相关文章
- shell脚本基本用法
下面是一些简单常用的脚本,工作中可能会用到,记录一下. #!/usr/bin/env bash #变量[=两边不要有空格], 在使用的时候需要用${变量名} 或者是$变量名 name="sa ...
- php类似shell脚本的用法
参考: http://www.cnblogs.com/myjavawork/articles/1869205.html php还可以用于类似于shell脚本,哈哈,对编程语言和对整个计算机系统的认识又 ...
- shell 脚本 exit 1 报错:numeric argument required问题解决
原因是在window环境编辑会有特殊字符,解决办法:sed -i'' "s/\r//" file_name
- [拾 得] 一枚迷人的贝壳 SHELL / Linux | shell 脚本初步入门
坚持知识分享,该文章由Alopex编著, 转载请注明源地址: http://www.cnblogs.com/alopex/ 索引: 什么是shell shell的分类 shell脚本的执行方式 ...
- Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法
一.需求背景 因此次项目的生产环境中部署了多套系统,每天会产生大量的日志(数百GB的量),侵占了服务器宝贵的存储资源空间.为了有效缓解服务器存储压力,考虑通过Linux的Shell脚本结合cr ...
- Shell脚本字符串匹配及日常命令工具 - 用法总结(技巧指南)
Shell提供了很多字符串和文件处理的命令,如awk.expr.grep.sed等命令,还有文件的排序.合并和分割等一系列的操作命令.下面重点总结下Shell字符串处理.文本处理以及各类命令及函数用法 ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- Shell,Bash,等脚本学习(有区别)
二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. 整数比较 -eq 等于,如:if [ "$a" -eq "$b" ] -n ...
- shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断
7月12日任务 20.5 shell脚本中的逻辑判断20.6 文件目录属性判断20.7 if特殊用法20.8/20.9 case判断 20.5 shell脚本中的逻辑判断 逻辑判断在shell中随处可 ...
随机推荐
- docker学习笔记-04:docker容器数据卷
一.容器数据卷是什么 1.为了保存docker容器运行时产生的数据,做数据的持久化,我们需要用到容器数据卷.因为如果不通过docker commit 生成新的镜像,那么当容器被删除时,数据自然就没有了 ...
- html5,css3炫酷实例-元素
自动完成输入框下拉列表 使用的插件:jquery-ui 使用数据源实现文本框的自动完成功能 <link href="https://cdn.bootcss.com/jqueryui/1 ...
- Day8 - E - The very same Munchhausen CodeForces - 1120E
A positive integer aa is given. Baron Munchausen claims that he knows such a positive integer nn tha ...
- LabVIEW面向对象的ActorFramework(2)
二.为什么要学习面向编程? 面向对象编程,如果将上文推荐的两本书读完后,基本上也就有了答案.从自我产品开发的经验中,理解为可以迅速解决中大型程序需求变化时,在不影响其他程序功能的情况下,能够实现新增功 ...
- PHP中strlen和mb_strlen函数的使用方式的不同
(1)strlen 获取字符串长度 (2)mb_strlen 使用方法: int mb_strlen ( string $str [, string $encoding ] )返回给定的字符串 ...
- 061、Java中利用return结束方法调用
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 051、Java中使用while循环实现1~100的累加
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 01.Delphi最简单的接口
我想学习一个插件框架,但是那个框架里面大量用到了接口,于是不得不把接口看一下了.总感觉接口编程这一块非常的绕,每一行都注释了. unit Unit1; interface uses Windows, ...
- 数据库连接需要dll
连接oracle引用: Oracle.ManagedDataAccess.dll和Oracle.ManagedDataAccess.EntityFramework.dll, 连接sqlserver 连 ...
- 6 —— node —— 响应一个完整的页面
const http = require('http'); const fs = require('fs'); const server = http.createServer(); server ...