多种shell脚本执行方式之间的区别

本文详细阐述了三种常见的Shell脚本执行方法及其差异:直接使用bash解释器、赋予脚本执行权限后运行及通过`.`操作符执行。通过具体示例说明了不同执行方式下子Shell的启动情况和默认Shell的影响。


多种shell脚本执行方式之间的区别

转载:http://emb.sunplusedu.com/answer/2013/0319/1142.html

今天凌阳嵌入式培训讲师王老师为大家讲解关于“多种shell脚本执行方式之间的区别”,大家赶紧来学习一下:
 
  shell脚本的执行方式:

  #bash   test.sh   直接使用指定的bash解释脚本test.sh
  #. test.sh    调用默认shell解释执行test.sh
  #chmod +x test.sh;    ./test.sh     增加可执行权限执行

  1、bash  test.sh  执行脚本的话不管shell脚本里边是否指定 #!/bin/sh都不会在用指定的sh命令解释器,而是用指定的bash执行脚本,然后启动子shell去执行
  测试方法 :echo  -e  “nihao” ,sh会打印-e这个参数    bash不会打印-e这个参数
  在test.sh脚本中写入下面的话
  #!/bin/sh
  echo -e "nihao"
  分别用bash  test.sh和./test.sh去执行,看现象。

  2、chmod +x test.sh;    ./test.sh     增加可执行权限执行,这种方式执行的话也是启动子shell去执行与第一种方式相同,只是第一种方式指定了用哪一种shell命令解释器去执行脚本,现在这种方式会使用脚本中指定命令解释器去执行脚本,如果脚本中未指定的话,那么使用默认shell去执行。默认shell查看  echo   $SHELL  查看系统的默认shell命令解释器。

  3、. test.sh  这个执行时在当前的shell中调用当前系统默认的shell命令解析器执行的,不会启动子shell  直接在当前的shell中执行,并且调用系统默认的shell去执行脚本,不管脚本中是不是指定shell命令解析器。
  测试方法 :echo  -e  “nihao” ,sh会打印-e这个参数    bash不会打印-e这个参数
  在test.sh脚本中写入下面的话
  #!/bin/sh
  echo -e "nihao"
  分别用 . test.sh和./test.sh去执行。
  Shell脚本中用#表示注释,相当于C语言的//注释。但如果#位于第一行开头,并且是#!(称为Shebang)则例外,它表示该脚本使用后面指定的解释器/bin/sh解释执行。如果把这个脚本文件加上可执行权限然后执行:

  $ chmod +x script.sh
  $ ./script.sh
  Shell会fork一个子进程并调用exec执行./script.sh这个程序,exec系统调用应该把子进程的代码段替换成./script.sh程序的代码段,并从它的_start开始执行。然而script.sh是个文本文件,根本没有代码段和_start函数,怎么办呢?其实exec还有另外一种机制,如果要执行的是一个文本文件,并且第一行用Shebang指定了解释器,则用解释器程序的代码段替换当前进程,并且从解释器的_start开始执行,而这个文本文件被当作命令行参数传给解释器。因此,执行上述脚本相当于执行程序
  $ /bin/sh ./script.sh
  以这种方式执行不需要script.sh文件具有可执行权限。再举个例子,比如某个sed脚本的文件名是script,它的开头是
  #! /bin/sed -f
  执行./script相当于执行程序
  $ /bin/sed -f ./script.sh
  以上介绍了两种执行Shell脚本的方法:
  $ ./script.sh
  $ sh ./script.sh
  这两种方法本质上是一样的,执行上述脚本的步骤为:
  图 31.1. Shell脚本的执行过程
       

 
  1. 交互Shell(bash)fork/exec一个子Shell(sh)用于执行脚本,父进程bash等待子进程sh终止。

  2. sh读取脚本中的cd ..命令,调用相应的函数执行内建命令,改变当前工作目录为上一级目录。

  3. sh读取脚本中的ls命令,fork/exec这个程序,列出当前工作目录下的文件,sh等待ls终止。

  4. ls终止后,sh继续执行,读到脚本文件末尾,sh终止。

  5. sh终止后,bash继续执行,打印提示符等待用户输入。
  如果将命令行下输入的命令用()括号括起来,那么也会fork出一个子Shell执行小括号中的命令,一行中可以输入由分号;隔开的多个命令,比如:
  $ (cd ..;ls -l)
  和上面两种方法执行Shell脚本的效果是相同的,cd ..命令改变的是子Shell的PWD,而不会影响到交互式Shell。然而命令
  $ cd ..;ls -l
  则有不同的效果,cd ..命令是直接在交互式Shell下执行的,改变交互式Shell的PWD,然而这种方式相当于这样执行Shell脚本:
  $ source ./script.sh
  或者
  $ . ./script.sh
  source或者.命令是Shell的内建命令,这种方式也不会创建子Shell,而是直接在交互式Shell下逐行执行脚本中的命令。
智慧园区解决方案摘要在当今这个信息化、智能化浪潮席卷全球的时代,传统园区正面临着前所未有的转型挑战与机遇。智慧园区,作为未来城市发展的重要组成部分,正以其独特的魅力吸引着越来越多的关注。本文将带您领略智慧园区的精髓,探索其如何通过创新技术实现全面升级,为园区管理者、企业及居民带来前所未有的便捷与高效。一、智慧园区:从挑战到机遇的华丽转身传统园区在信息基础设施、数据互通、应用创新等方面存在诸多痛点。老旧的网络系统、独立运行的应用子系统,如同一个个信息孤岛,难以形成合力,导致管理效率低下,用户体验不佳。然而,随着云计算、大数据、人工智能等新一代信息技术的飞速发展,智慧园区应运而生。它不仅仅是对传统园区的简单升级,更是一场深刻的变革。通过构建完善的信息基础设施,实现数据的全面感知、传输、处理与分析,智慧园区能够打破信息孤岛,促进资源的高效整合与共享。这不仅极大地提升了园区的运营效率和管理水平,更为园区的可持续发展奠定了坚实的基础。在智慧园区中,数据中心平台和IOC运营平台扮演着举足轻重的角色。数据中心平台如同园区的“数据心脏”,负责收集、存储、处理园区内各类数据,为决策提供有力支持。而IOC运营平台则是园区的“智慧大脑”,通过对数据的深度挖掘与分析,实现对园区人、物、事件、能耗、环境等关键要素的实时监测与预警。这种全局性的掌控能力,使得园区管理者能够迅速响应各种突发情况,制定更加科学合理的决策。二、智慧服务:让园区生活更加便捷高效智慧园区的魅力不仅体现在其强大的数据处理能力上,更在于它能够为园区内的企业、居民提供全方位、个性化的智慧服务。在信息化服务方面,智慧园区通过智慧招商、物业管理、企业画像等功能,为企业提供了更加便捷、高效的入驻与发展环境。智慧招商系统利用大数据分析技术,帮助企业精准定位目标客户,提高招商转化率;物业管理平台则通过集成化的服务流程,实现了对园区内各类设施的智能化管理,提升了物业服务的品质与效率。与此同时,智能物联体系的应用更是为园区生活带来了翻天覆地的变化。从智慧资产的全生命周期管理,到智慧楼宇的智能化控制;从智慧安防的主动防范与应急联动,到智慧消防的实时监测与预警,智能物联体系将园区内的各类设施紧密连接在一起,形成了一个有机的整体。这种高度集成的智能化管理模式,不仅提升了园区的安全性与运营效率,更为居民带来了更加舒适、便捷的生活体验。在生活服务体系方面,智慧园区同样不遗余力。智慧餐饮、智慧休闲等创新应用的推出,让园区内的餐饮、购物、娱乐等生活配套服务变得更加智能化、个性化。通过智能餐具、无人便利店、共享睡眠仓等智能设备的应用,居民可以享受到更加便捷、高效的生活服务。这种集智能化、人性化于一体的生活服务体系,让智慧园区成为了真正意义上的“智慧城市”缩影。三、未来展望:智慧园区引领城市发展新风尚随着技术的不断进步和应用场景的不断拓展,智慧园区正朝着更加智能化、人性化、绿色化的方向发展。未来,智慧园区将更加注重数据的深度挖掘与价值创造,通过大数据分析、人工智能等技术手段,为园区内的企业提供更加精准、高效的服务。同时,智慧园区还将加强与城市其他领域的深度融合,如智慧交通、智慧环保等,共同推动城市的智慧化进程。此外,智慧园区还将更加注重用户体验与参与感。通过构建开放、共享的智慧化服务平台,鼓励居民、企业等各方力量积极参与到园区的智慧化建设中来。这种全民参与、共建共享的智慧化建设模式,不仅将进一步提升园区的智慧化水平,更将激发城市的创新活力与发展潜力。总之,智慧园区作为未来城市发展的重要方向之一,正以其独特的魅力和无限的潜力吸引着越来越多的关注。我们有理由相信,在不久的将来,智慧园区将成为城市发展的新风尚,引领我们迈向更加智能化、人性化的美好未来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值