美文网首页Shell
Shell学习笔记-脚本执行方式

Shell学习笔记-脚本执行方式

作者: 赵客缦胡缨v吴钩霜雪明 | 来源:发表于2020-11-15 07:32 被阅读0次

    shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作。

    那么问题来了,在一个脚本中怎么调用其他的脚本呢?

    有三种方式,分别是fork、source和exec

    1. fork

    即通过sh 脚本名进行执行脚本的方式。

    下面通过一个简单的例子来讲解下它的特性。

    创建father.sh,内容如下:

    #!/bin/bash
    
    echo "父shell进程开始执行"
    sh son.sh #父shell fork子shell环境执行另一个脚本
    echo "父shell进程执行完毕"
    

    创建son.sh,内容如下:

    #!/bin/bash
    
    echo "子shell被调用"
    

    执行sh father.sh:

    [wangsl@wangsl]# sh father.sh 
    父shell进程开始执行
    子shell被调用
    父shell进程执行完毕
    

    通过以上例子,可以知道fork的特性为:

    在一个脚本中调用另一个脚本,被调用脚本执行完成之后返回给父shell进程,父shell进程继续执行剩下的指令

    2. source

    即通过source或. 脚本名进行执行脚本的方式。

    下面通过一个简单的例子来讲解下它的特性。

    创建father.sh,内容如下:

    #!/bin/bash
    
    source son.sh  
    #通过source方式将son.sh加载到当前shell环境中
    echo "father访问son中定义的局部变量:$sonVar"
    

    创建son.sh,内容如下:

    #!/bin/bash
    
    sonVar="son var"
    echo "son定义了一个变量:sonVar=$sonVar"
    

    执行sh father.sh:

    [wangsl@wangsl]# sh father.sh 
    son定义了一个变量:sonVar=son var
    father访问son中定义的局部变量:son var
    

    通过以上例子,可以知道source的特性为:

    source调用,是把被调用脚本加载到当前的shell环境中来执行,就好像是在一个脚本里面运行一样,他们的定义的局部变量共享

    3. exec

    即通过exec 脚本名进行执行脚本的方式。

    下面通过一个简单的例子来讲解下它的特性。

    创建father.sh,内容如下:

    #!/bin/bash
    
    echo "父shell开始执行"
    exec sh son.sh
    echo "父shell完成执行,但是这句话不会被执行"
    

    创建son.sh,内容如下:

    #!/bin/bash
    
    echo "子shell被父shell exec调用,执行权已经被抢占过来了,不会在交回给父shell进程"
    

    执行sh father.sh:

    [wangsl@wangsl]# sh father.sh 
    
    父shell开始执行
    子shell被父shell exec调用,执行权已经被抢占过来了,不会在交回给父shell进程
    

    通过以上例子,可以知道exec的特性为:

    exec调用,也是fork一个子shell环境来执行被调用脚本,但是父shell环境的执行权会被剥夺,也就是执行权被交给了被调用脚本,父shell环境不再拥有执行权,无论父shell脚本中的指令是否执行完成,都不在被执行,随着子shell进程的结束而结束。

    相关文章

      网友评论

        本文标题:Shell学习笔记-脚本执行方式

        本文链接:https://www.haomeiwen.com/subject/jehvbktx.html