如何在Shell脚本中调用另一个脚本

您所在的位置:网站首页 shell执行其他脚本 如何在Shell脚本中调用另一个脚本

如何在Shell脚本中调用另一个脚本

#如何在Shell脚本中调用另一个脚本| 来源: 网络整理| 查看: 265

如何在Shell脚本中调用另一个脚本 发布时间:2021-05-08 17:32:23 来源:亿速云 阅读:419 作者:Leah 栏目:开发技术

如何在Shell脚本中调用另一个脚本?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

假如有脚本 first.sh:

#!/bin/bash #------------------ #@file:first.sh #------------------ echo 'your are in first file'

如何在其它Shell脚本中调用first.sh呢?主要有三种方法:source、点号以及sh命令。

1.source

#!/bin/bash #--------------- #@file:second.sh #--------------- echo 'your are in second file' source first.sh

2.点号.

#!/bin/bash echo 'your are in second file' . first.sh

注意,点号与脚本文件之间记得要有空格。

3.sh命令

#!/bin/bash echo 'your are in second file' sh first.sh

三者输出的结果都是:

your are in second fileyour are in first file

4.三者的区别

使用source命令和点号.是等价了,类似于C/C++中的#include预处理指令,都是将指定的脚本内容拷贝至当前的脚本中,由一个Shell进程来执行。使用sh命令来调用另外的脚本和前面两种方法有着本质的区别。使用sh命令则会开启新的Shell进程来执行指定的脚本,这样的话,父进程中的变量在子进程中就无法访问。参考如下代码:first.sh内容如下,访问了second.sh中的变量second。

#!/bin/bash echo 'your are in first file' echo 'second:' $second

second.sh内容,通过上面介绍的三种方法来调用first.sh,看看对second.sh的变量second访问有什么区别!

#!/bin/bash second=lvlv echo 'your are in second file' source first . first sh first

程序的输出结果是:

your are in second fileyour are in first filesecond: lvlvyour are in first filesecond: lvlvyour are in first filesecond:

可见,使用sh命令开启一个子进程来调用指定的shell脚本无法访问父进程的变量。我们如何让子进程访问父进程中变量呢?可以使用export命令。

5.export命令设置临时环境变量

我们需要知道Shell中按照变量的作用域和生命周期,Shell变量可分为四大类:(1)永久环境变量:需要修改配置文件,变量永久生效。(2)临时环境变量:使用export命令行声明即可,变量在shell脚本进程结束后仍然有效,但在关闭当前shell会话后失效。(3)全局变量:在脚本中定义,仅在当前Shell脚本中有效,其他Shell脚本进程不能访本,其作用域从定义的位置开始,到脚本结束或被显示删除的地方为止。注意,全局变量既可以在Shell函数内定义,也可以在shell函数外定义,因为shell函数内定义的变量默认为global,且作用域从“函数被调用时执行变量定义的地方”开始,到脚本结束或被显示删除的地方为止。(4)局部变量。在shell脚本中函数内显示使用local关键字定义的变量。其作用域局限于函数内。同名local变量会屏蔽global变量。

所以,使用export命令我们申明的是临时环境变量,在当前shell会话中,所有的shell实例都可以访问由export命令申明的临时环境变量。因为当前shell会话中的所有shell实例,都是当前shell会话的子进程,所以可以与父进程一同访问环境变量。

second.sh修改如下:

#!/bin/bash export second=lvlv echo 'your are in second file' sh first.sh

执行second.sh将输出:

your are in second fileyour are in first filesecond: lvlv

至此,通过export命令设置临时环境变量的方式,使得Shell子进程能够访问父进程中的变量。

6.export命令设置永久环境变量

那么如何定义永久环境变量呢?可以采用如下两种方法:

(1) 在/etc/profile文件中添加环境变量,对所有用户永久生效。例如通过vim编辑/etc/profile文件,在最后一行添加CLASSPATH变量。

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

注意,修改文件后要想马上生效需要执行source /etc/profile,不然只能在下次重新登录时才生效。

(2) 在~/.bash_profile文件中添加环境变量,只对当前用户永久有效。例如通过vim编辑~/.bash_profile文件中添加环境变量。

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

注意:修改文件后要想马上生效需要执行source ~/.bash_profile,不然只能在下次重新登录时才生效。

另外,如想删除已设置的环境变量,可以使用unset(builtin)命令来清除环境变量 ,例如$unset CLASSPATH。使用readonly命令可设置只读变量。如果使用了readonly命令的话,变量不可以被修改或清除。

关于如何在Shell脚本中调用另一个脚本问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读: 在Bat批处理中调用Powershell脚本 如何在python中调用其他脚本

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

shell 上一篇新闻:Linux中有哪些压缩格式的压缩与解压方法 下一篇新闻:linux中反弹shell的原理是什么 猜你喜欢 云服务器怎么划分虚拟空间 如何清除云服务器上的挖矿病毒 购买云服务器需要考虑哪些因素 云服务器上dns解析失败是什么意思 云服务器带宽影响什么 云服务器如何连接本地打印机 怎么搭建mysql主从同步 mysql锁表是怎么造成的 如何避免mysql事务锁表 mysql触发器怎么调试


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3