声明:所有文章只作为学习笔记用,转载非原创
终端;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.位置变量:2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
5.特殊变量:0, @, USER"
(3) 命令引用:name=COMMAND
name={name} $name
"":弱引用,其中的变量引用会被替换为变量值
'':强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
删除变量:unset name
网友评论