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中随处可 ...
随机推荐
- ThinkCMF框架上的任意内容包含漏洞
一.背景 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建. ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据 ...
- 模拟一次sql注入攻击
在你的web服务目录下 创建一个php文件如下 <?php $conn = db_connect(); $sql = sprintf('update users set password = & ...
- 吴裕雄--天生自然java开发常用类库学习笔记:RumTime类
public class RuntimeDemo01{ public static void main(String args[]){ Runtime run = Runtime.getRuntime ...
- IDEA启动Tomcat报错Address localhost:1099 is already in use解决办法
问题:Error running 'lugia-web': Address loaclhost:1099 is already in use如下图 解决方法:cmd输入下面命令: netstat -a ...
- edge浏览器两个标签页localStorage不同步,解决办法
今天遇到个奇怪的问题,edge两个标签页之间的localStorage值不同步,网上说ie和edge如果想让localStorage值同步,需要主动出发localStorage的change事件 wi ...
- Python 编写代码 检查是否遵循PEP 8标准
实际上并非必须遵守PEP 8,但是它已经成为一个默认的.约定俗成的规则,可以使代码风格更统一,提高可读性. 由于最近一直在学习Ubuntu,因此此处仍然以Ubuntu为例,介绍一下规则检查工具,它能帮 ...
- VC 插入excel
CString ePath,iPath; m_ePath.GetWindowText(ePath); m_iPath.GetWindowText(iPath); _Application app; W ...
- USB Windows驱动 音频解决方案芯片DP108
DP108是一款完全替代CM108的高度集成的单芯片USB音频解决方案芯片.方便的USB即插即用的兼容性,用户可以快速创建易用性,高质量和便携式USB音频产品基于高度集成的单芯片解决方案.所有重要的模 ...
- Python基础笔记:input()输入与数据类型转换
input就是个万能输入,不过input输入的元素都是以str形式保存的,如果要他作为一个整数的话,就需要进行数据类型转换. input的使用 name=input('please input you ...
- 【LeetCode】 240. 搜索二维矩阵 II
题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 mat ...