美文网首页
Linux 父子Shell

Linux 父子Shell

作者: oasis_m | 来源:发表于2020-01-31 17:32 被阅读0次

    声明:所有文章只作为学习笔记用,转载非原创
    终端;https://blog.csdn.net/zyboy2000/article/details/88100843

    https://www.cnblogs.com/lqynkdcwy/p/9350144.html

    重点看看:子shell 嵌套模式

    https://blog.csdn.net/zhou16333/article/details/83796907
    调用脚本的模式:

    shell调用脚本的模式说明

    在主脚本中嵌套脚本的方式有很多,常见的为fork、exec、source三种模式,这三种调用脚本的方式有一定的区别。

    fork模式调用脚本知识

    fork模式是最普通的脚本调用方式,及直接在父脚本里面用“/bin/bash /directory/script.sh”来调用脚本,或者在命令行中给script.sh脚本文件设置执行权限,然后使用/directory/script.sh来调用脚本。
      使用上述方式调用脚本的时候,系统会开启一个SubShell(子shell)执行调用的脚本,SubShell执行的时候ParentShell还在,SubShell执行完毕后返回到ParentShell。最后的结论是SubShell可以从ParentShell继承环境变量,但是默认情况下SubShell中的环境变量不能带回ParentShell。
      执行方式说明:
    /directory/script.sh #<== 对脚本赋予执行权限,直接执行脚本。
    /bin/bash /directory/script.sh #<== 在不赋予执行权限时,利用执行解释器执行

    exec模式调用脚本

    exec模式与fork模式调用脚本的方式不同,<mark style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; background-color: rgb(248, 248, 64); color: rgb(0, 0, 0); overflow-wrap: break-word;">不需要新开一个SubShell来执行被调用的脚本</mark>。被调用的脚本与父脚本在同一个shell内执行,但是使用exec调用一个新脚本以后,<mark style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; background-color: rgb(248, 248, 64); color: rgb(0, 0, 0); overflow-wrap: break-word;">父脚本中的exec执行之后的脚本内容就不会再执行了,这就是exec和source的区别</mark>。
      执行方式说明:
    exec /directory/script.sh

    source模式调用脚本

    <mark style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; background-color: rgb(248, 248, 64); color: rgb(0, 0, 0); overflow-wrap: break-word;">source模式与fork模式的区别是不会新开一个SubShell来执行被调用的脚本,而是在同一个shell中执行,所以在被调用的脚本中声名的变量和环境变量都可以在主(父)脚本中获取和使用</mark>。
      source模式与exec模式相比,最大的不同之处是使用source调用一个新脚本以后,父脚本中source命令行之后的内容在自脚本执行完毕后依然会被执行。
      执行方式说明:
    source /directory/script.sh #<== 使用source不容易被误解,而“.”和“./”相近,容易被误解。
    . /directory/script.sh #<== “.”和source命令的功能是等价的。

    https://blog.csdn.net/lwj457700209/article/details/99600570
    根据变量的生效范围等标准划分下面变量类型:
    set:查看所有变量(全局变量,局部变量还有函数)
    1.局部变量(标准变量,普通变量):生效范围为当前shell进程---当前会话(session);对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
    echo $$:当前进程编号(4496)
    echo $PPID:父进程编号(4272)

    2.环境(全局)变量:生效范围为当前shell进程及其子进程(export=declare -x|env命令可以查看系统中环境变量)
    第一种定义方法:name=mage------export name
    第二种定义方法:export name=mage
    第三种定义方法:declare -x name=mage

    3.本地变量:生效范围为当前shell进程中某代码片断,通常指函数
    4.位置变量:1,2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
    5.特殊变量:?,0, *,@, #,$$ 变量赋值:name=‘value’ 可以使用引用value: (1) 可以是直接字串; name=“root" (2) 变量引用:name="USER"
    (3) 命令引用:name=COMMAND name=(COMMAND) 变量引用:{name} $name
    "":弱引用,其中的变量引用会被替换为变量值
    '':强引用,其中的变量引用不会被替换为变量值,而保持原字符串
    显示已定义的所有变量:set
    删除变量:unset name

    相关文章

      网友评论

          本文标题:Linux 父子Shell

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