利用直接方式或bash执行

该 脚本 都会使用一个新的 bash 环境来执行脚本内的指令!也就是说,使用这种执行方式时, 其实 script 是在子程序的 bash 内执行的

知识点

当子程序完成后,在子程序内的各项变量或动作将会结束而不会传回到父程序中

这句话是啥意思呢?煮个栗子

我们前面提到过的 showname.sh这个脚本来说明好了,这个脚本可以让用户自行设定两个变量,分别是 firstname 与 lastname,想一想,如果你直接执行该指令时,该指令帮你设定的 firstname 会
不会生效?看一下底下的执行结果:

[root@node01 bin]$  echo ${firstname} ${lastname}
<==确认了,这两个变量并不存在喔!
[root@node01 bin]$  sh showname.sh
Please input your first name: Rivesr <==这个名字是自己输入的
Please input your last name: Xue
Your full name is: Rivers Xue <==看吧!在 script 运作中,这两个变数有生效
[root@node01 bin]$  echo ${firstname} ${lastname}
<==事实上,这两个变量在父程序的 bash 中还是不存在的!

上面的结果你应该会觉得很奇怪,怎么我已经利用 showname.sh设定好的变量竟然在 bash 环境底下无效!怎么回事呢? 如果将程序相关性绘制成图的话,我们以下图来说明。当你使用直接执行的方法来处理时,系统会给予一支新的 bash 让我们来执行 showname.sh里面的指令,因此你的firstname, lastname 等变量其实是在下图中的子程序 bash 内执行的。 当 showname.sh执行完毕后,子程序 bash 内的所有数据便被移除,因此上表的练习中,在父程序底下 echo ${firstname} 时, 就看不到任何东西了!这样可以理解吗?

利用 source 来执行脚本:在父程序中执行

如果你使用 source 来执行指令那就不一样了!同样的脚本我们来执行看看:

[dmtsai@study bin]$  source showname.sh
Please input your first name: Rivers
Please input your last name: Xue
Your full name is: Rivers Xue
[dmtsai@study bin]$  echo  ${firstname} ${lastname}
Rivers Xue <==嘿嘿!有数据产生喔!

竟然生效了!没错啊!因为 source 对 script 的执行方式可以使用底下的图示来说明! showname.sh会在父程序中执行的,因此各项动作都会在原本的 bash 内生效!这也是为啥你不注销系统而要让某些写入 ~/.bashrc 的设定生效时,需要使用『 source ~/.bashrc 』而不能使用『 bash ~/.bashrc 』是一样的啊!

Shell脚本编程之(三)执行方式差异(source, sh script, ./script)相关推荐

  1. 【Linux命令行与Shell脚本编程】三,Linux文件系统

    Linux命令行与Shell脚本编程 第三章 Linux文件系统 文章目录 Linux命令行与Shell脚本编程 三.Linux文件系统 3.1,查看文件 3.1.1,ls 命令 选项和参数 3.1. ...

  2. Shell脚本编程基础 三 使用结构化命令

    结构化命令允许我们改变程序执行的顺序,在某些条件下执行一些命令而在其他条件下跳过另一些命令. (1)使用if-then语句 结构化命令中,最基本的类型就是if-then语句,其格式如下: if com ...

  3. Linux下shell脚本的4中执行方式

    转自http://www.jb51.net/article/53924.htm bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置 ...

  4. shell脚本的两种执行方式区别举例

    1. sh及bash方式执行: 第一个字母l:看来sh只是bash的一个链接. 要了解区别,先建立一个实验脚本如下: echo 'udir=`pwd`' >testsource.sh #符号为单 ...

  5. 《Linux命令行与shell脚本编程大全》(第三版)读书笔记

    第一部分 Linux命令行 第三章.基本的bash shell命令 bash手册 man 命令 例子: man cat 空格翻页.回车下一行.左右键看右侧(左侧)内容.q退出 info info in ...

  6. 《linux命令行与shell脚本编程大全》第三版 - 核心笔记(3/4):函数与图形化脚本

    <linux命令行与shell脚本编程大全> 全书4部分: ☆ [1]linux命令行(1-10章) ☆ [2]shell脚本编程基础(11-16章) ☆ [3]高级shell脚本编程(1 ...

  7. Linux shell 脚本编程-实战篇(三)

    继: Linux shell 脚本编程-实战篇(二) 3. 一些小有意思的脚本 3.1 发送消息 3.1.1 功能分析 对于这种简单的脚本,需要的功能不多.涉及的一些命令很常见,下面了解脚本所需的几个 ...

  8. shell脚本编程笔记(二)—— 执行数学运算

    数学运算在编程中也很重要,shell对它的支持并不算好,本文整理一下shell进行数学运算的途径,各种方法的缺点. 一. expr命令 shell最开始处理数学表达式的命令,可以在命令行做算术运算,参 ...

  9. (shell脚本编程)linux如何利用脚本执行多条命令以及linux如何执行定时任务

    文章目录 shell脚本编程 条件语句 脚本执行多条命令 执行定时任务 本文着重于提高我们的生产力,所以将这几个作为了一个专题. shell脚本编程 脚本中不同语句用分号隔开,和c语言一样. for, ...

最新文章

  1. Redis 的性能幻想与残酷现实(转)
  2. C语言实现链式栈(LinkStack)
  3. Android TableLayout 常用的属性介绍及演示
  4. Java线程详解(16)-条件变量
  5. 一些常规形几何形状的绘制和效果填充(一)
  6. [转] OpenStack Kilo 更新日志
  7. java中s方法_Java中Arrys数组常用的方法
  8. POJ1201-Intervals【差分约束,负环,SPFA】
  9. Visual studio 2013安装及单元测试
  10. 《Puppet实战手册》——1.4 利用Git管理配置清单
  11. poj -- 1042 Gone Fishing(枚举+贪心)
  12. Java实现MD5加盐加密算法
  13. JAVA控制stl文件导出图片_stl2png: 将PRO/E等3D建模工具生成的STL格式的模型文件生成缩略图的工具。特别适合体积较大的STL文件。...
  14. Ubuntu下安装多个Java及切换
  15. [译]关于Android图形系统一些事实真相
  16. 给初学者推荐的10个Python免费学习网站,赶紧收藏吧
  17. mye连接mysql_利用MyEclipse连接数据库并自动生成基于注解或者XML的实体类
  18. 数据挖掘(4.1)--分类和预测
  19. 虾皮电商选品时必须注意哪些是违禁品
  20. Javascript在线美化,格式化,js美化

热门文章

  1. OSX Finder显示隐藏文件
  2. QT中调用shell或外部命令
  3. HDU1875prim算法求最小生成树
  4. 2.权限管理准备工作:你应该知道的ASP.NET网站最基本的安全措施!
  5. 目标检测标注格式转换:labelme2yolo yolo2labelme
  6. 识别你的ADFS是什么版本的(Which version of ADFS is running)
  7. Mysql存中文字符出错:Incorrect string value: '\xC2\xE9\xD7\xED\解决方法
  8. python3.x执行post请求时报错“POST data should be bytes or an iterable of bytes...”的解决方法...
  9. 阿里面试官的分享Java面试中需要准备哪些多线程并发的技术要点
  10. 《企业软件交付:敏捷与高效管理精要》——2.2 MyCo公司和MyProj企业软件交付项目...