百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

带你了解企业是如何编写脚本的-第3篇:脚本的各种执行方式区别

liuian 2024-12-16 14:48 95 浏览

在上一篇中:带你了解企业是如何编写脚本的-第2篇:Shell脚本规范的结尾中,我大致说了一下不同的脚本执行方式,而这些执行方式的区别是什么呢?下面将通过简单的案例进行讲解!

首先我们回顾一下大致的几种执行方式:

  • 通过解析器调用执行脚本
  • 通过source获取脚本
  • 通过添加执行权限执行

其实不同的执行方式最主要的区别就在于进程和变量之间的关系,如果只是单独一个脚本文件,那么使用任何一个执行方式都是无差别的,但是如果是多个脚本文件之间进行调用,并且还涉及到变量、循环之类的则会对执行方式有一定的要求。


下面的案例均以多个脚本不同的调用方式进行演示,单脚本的执行只是姿势不一样而已,效果都是一样的

1、脚本内容

我创建两个脚本文件,第一个是主脚本:hello.sh,内容如下:

#!/bin/bash
echo "hello"
echo "当前脚本名称: [ $0 ]"
echo "当前脚本进程: [ $ ]"
echo "传入的参数是: [ $1 ]"
cmd="$1 /opt/liumou.sh"
$cmd
echo "调用结束,[ /opt/liumou.sh ]定义的变量 [ name=$name ]"

$0 #表示当前执行的脚本名称

$1 #则是我传入的执行/调用第二个脚本 的方式

第二个是/opt/liumou.sh,脚本内容如下:

#!/bin/bash
echo "刘某"
echo "当前脚本名称: [ $0 ]"
echo "当前脚本进程: [ $ ]"
echo "传入的参数是: [ $1 ]"
echo "当前调用方式: [ $cmd ]-->来自:[ /opt/liumou.sh ]"
name="坐公交也用券"


2、实现的效果

在hello.sh中,有一条命令是 $cmd ,这个变量是决定调用另一个脚本的方式,而这个值是在执行hello.sh的时候,通过1参进行传入的值决定实际的调用方式,下面分别使用不同的值进行调用,然后看他们之间的区别:

2.1、传入bash


此时可以看出来,通过bash的调用:

  • hello.sh的进程与liumou.sh的进程是不一样的
  • liumou.sh无法获取到hello.sh的变量
  • hello.sh也无法获取到liumou.sh的变量
  • 两个脚本显示的脚本名称是各自的名称:

也就是说:

通过bash这种调用方式,其实是将第二个脚本以一个新的进程进行,这个新的进程无法主进程共享变量、进程,它们是独立的,但是主脚本会等待子进程结束才会继续进行后面的操作(最后一句是由 hello.sh输出的)

2.2、通过source调用

命令如下:

bash /opt/hello.sh source


从结果可以看出,这次的信息是全部都有的,相比使用bash进行调用,这个source的调用则更像是把另一个脚本(liumou.sh)的内容加入到自己的脚本内容中,具体区别如下:


  • hello.sh的进程与liumou.sh的进程是一样的
  • liumou.sh可以获取到hello.sh的变量
  • hello.sh可以获取到liumou.sh的变量
  • 两个脚本显示的脚本名称是统一的名称(liumou.sh已经不出现了)

2.3、通过.调用

从结果来看,通过“.”的调用结果与通过" suorce ”的结果是一样的(变量与脚本名等),并且通过脚本进行调用的时候,被调用的脚本无需拥有执行权限。

3、通过添加权限的方式执行然后传入不同的调用方式

从结果来看,在主脚本的执行方式上,bash和. 的执行方式都是一样的,执行结果只会与调用第二个脚本的时候才有区别,所以主脚本执行的方式看你的习惯。

2.4、通过source执行


从执行结果来看,总体与其他的效果都一样,但是有两个区别:

1、主脚本无法获取到脚本名称

2、所有的进程PID都是一样的,不会因为调用方式而改变

3、总结

从上面的结果来看,我们可以得出以下总结:

3.1、单脚本

  • 执行方式使用添加权限(./hello.sh)或解析器调用(bash hello.sh)的结果都是一样的
  • source执行方式只建议对变量配置文件进行执行,不建议对程序脚本执行

3.2、脚本引用

  • 主脚本的执行方式与单脚本一样,哪个方便使用哪个,建议使用解析器调用,因为可以进行调试模式
  • 调用子脚本使用不同的调用方式会有不一样的结果,可以根据实际需求使用不同的方式,总体建议使用source

番外:调试模式


那么本期文章就到这里结束了,对于脚本的执行方式你觉得还有哪些需要补充呢?请在评论区说出来和大家一起讨论吧!

相关推荐

wan口未连接是欠费吗(wan口未连接是怎么回事)

网费欠费了路由器WAN指示灯常亮不闪烁,一个灯亮。路由器正常工作的话,电源指示灯是常亮状态,SYS系统指示灯和WAN指示灯会闪亮,尤其是WAN指示灯的状态有些复杂:如果WAN指示灯不亮,说明网络连接有...

如何用手机修复sd卡(如何用手机修复sd卡受损)

第一步:将要修复的内存卡,用读卡器连接到电脑上,然后下载失易得数据恢复软件。    第二步:运行软件,选择要恢复的“u盘/储存卡”功能。注:在恢复数据之...

惠普台式机bios设置(惠普台式机bios设置核显内存)

1、按电源键启动电脑,在屏幕刚亮时,不停点击F10按键,就可以进入BIOS界面;2、如果F10没反应,则在启动时不停点击ESC键;3、这个时候会进入到启动菜单选项,F10BIOSSetup就是BI...

搜狗输入法不见了怎么调出来

因为在设置里勾选了智能ABC风格,所以他会像智能ABC一样,按空格才会显示。右键点击搜狗皮肤,设置属性,勾选搜狗风格就好了。注意,当你勾选智能ABC风格的时候会自动勾选“按空格出字”。使用【ctrl...

类似系统的黑科技网吧(系统的黑科技网吧好看吗)

如果机器配置和装修都不追求高档的话应该差不多只要不是全部追求顶配基本上可以

输入法哪个好用占内存又小(哪种输入法占内存小)

最不占内存的是系统自带的输入法,不过只适合win8用户,对于win7和xp用户推荐qq输入法,不推荐搜狗(1,安装包就可以看出占用系统大小,2,各种后台运行,3,各种广告提醒),除了qq推荐谷歌输入法...

2025组装机推荐配置(21年装机配置)

1.CPU:Intel酷睿i5-10400F;2.主板:华硕H410M-K;3.内存:金士顿16GBDDR42666MHz;4.硬盘:希捷Barracuda1TB7200转;5.显卡...

怎么恢复已经删除的人(怎么恢复已经删了的好友)
怎么恢复已经删除的人(怎么恢复已经删了的好友)

我们总是把美好的人和事进行拍照留念,手机相册中的照片越来越多,占用的空间也随之越来越大,如果在定期清理照片时误删了重要的照片,又该通过什么办法找回来呢?一、从手机最近删除中恢复手机照片删除之后,有两种方法可以找回,第一种就是手机自带的恢复功...

2026-01-01 21:55 liuian

三星手机系统下载(三星手机新版本下载)

三星手机下载系统有几种方法,其中最常见的方法是通过手机的设置菜单来下载系统更新。用户可以进入手机的设置菜单,找到“关于手机”或“软件更新”选项,然后点击“检查更新”来查看是否有可用的系统更新。如果有更...

安装系统要在u盘下载什么(安装系统对u盘要求)

、U盘装系统分两种,一种是pe启动盘,一种是使用制作工具直接将系统刻录到U盘2、系统镜像也分很多种,ghost系统镜像有iso和gho两种,原版系统镜像有iso和wim两种3、如果是大白菜pe启动...

原版win7家庭版(win7家庭版怎么样)

同配置下的流畅度Win7家庭普通版》家庭高级版》专业版》旗舰版各版本的的功能存在差异,功能越少运行越流畅,因为后台进程较少。办公的话建议专业版起步,游戏的话就无所谓了。网上有一些精简版,跑起来贼流畅...

win7搜索不到共享打印机(win7共享打印机搜索不到打印机)

win7上搜索不到共享的打印机解决方法如下:1、点击开始菜单,在搜索栏中输入“services.msc”(输入时不要打引号),在搜索结果中启动程序。如果此时弹出用户账户控制窗口,请点击“继续”。2...

无线显示不可上网怎么回事(无线不可上网怎么回事手机能连上)

一、故障原因:1、路由器不稳定有些无线路由器、光猫(宽带猫)的质量比较差,长时间运行后会出现死机等一系列的问题。2、宽带出现故障如果家的wifi,之前连接后可以上网,突然就出现了无法上网的这个问题。并...

win7无本地连接(windows7本地连接无internet访问)

1、找到任务栏右下角右键任何一个连接,出现的“打开网络和共享中心”2、当然如果没有网络连接图标,也可以找到“网络”图标右键“属性”功能打开网络中心3、在“网络和共享中心”菜单页面,找到右上角有一个“更...

下载了个驱动精灵却安装不了

1、安装驱动之前应该先查看一下操作系统是否合适。32位驱动无法安装在64位驱动上。2、安装前先检测驱动是否余有残留,将其清理干净,不然容易导致失败。3、装之前可以先进行检测一下,如果缺少安装驱动的组件...