学习内容来自B站UP:泷羽sec
微信公众号:泷羽sec
1.source命令调用
-
基本原理
- source命令(也可以使用点号 “.” 来代替,如. script.sh)在当前 Shell 环境下执行脚本。这意味着被调用脚本中的变量、函数定义和环境设置等会直接影响到当前 Shell 环境。
-
示例场景
-
假设有两个脚本script1.sh和script2.sh。script1.sh内容如下:
#!/bin/bash var1="Value is script1" function func1() { echo "Function in script1" } -
若script2.sh需要调用script1.sh并使用其中的变量和函数,可以这样写:
#!/bin/bash source script1.sh echo $var1 func1- 当执行script2.sh时,会输出Value is script1,然后输出Function in script1。这是因为source命令使得script1.sh中的变量和函数在script2.sh的环境中可用。
-
2.bash命令调用
-
基本原理
- bash script.sh会开启一个新的子 Shell 来执行脚本。在子 Shell 中定义的变量、函数等在子 Shell 结束后(即被调用脚本执行完毕)通常不会影响到调用脚本所在的父 Shell 环境。
-
示例场景
-
假设script3.sh内容为:
#!/bin/bash var2="Value is script3" echo $var2 -
script4.sh调用script3.sh如下:
#!/bin/bash bash script3.sh echo $var2- 当执行script4.sh时,会先输出Value is script3,然后输出一个空行。因为var2是在script3.sh所在的子 Shell 中定义的,在script4.sh所在的父 Shell 中无法访问这个变量。
-
3.封装函数
-
基本原理
- 把要调用的脚本内容改写为函数形式,然后在另一个脚本中通过source等方式加载函数定义,并进行函数调用。这种方式可以更好地控制脚本的执行,并且方便传递参数。
-
示例场景
-
例如,有一个脚本script5.sh,原始内容为:
#!/bin/bash echo "This is script5" -
将其改写为函数形式:
#!/bin/bash function script5_func() { echo "This is script5" } -
另一个脚本script6.sh要调用这个函数,可以这样写:
#!/bin/bash source script5.sh script5_func
-
4.直接调用(适用于可执行脚本)
-
基本原理
- 如果脚本有可执行权限(通过chmod u+x script.sh设置),可以使用脚本的绝对路径或相对路径来执行它。这在一定程度上也实现了脚本之间的调用。
-
示例场景
-
假设script7.sh和script8.sh在同一目录下,script7.sh是可执行脚本,内容如下:
#!/bin/bash echo "This is script7" -
script8.sh要调用script7.sh可以写为:
#!/bin/bash ./script7.sh- 这里./表示当前目录。如果脚本没有可执行权限,会出现权限错误,需要先添加执行权限。
-

2664

被折叠的 条评论
为什么被折叠?



