shell脚本不同执行方式及分类
通常可以通过以下命令执行shell脚本文件: 1、source命令 2、.命令 3、sh命令 4、bash命令 5、./脚本文件 不同的执行命令分为2类执行方式: 第一类执行方式 在当前shell环境即执行脚本调用命令的进程中执行(shell中定义的变量会互受影响),在编写shell脚本项目时非常适合引入公共函数及公共变量 相关命令:source命令即.命令 第二类执行方式 在子shell环境即在新创建进程中执行(父shell中只有export的变量会传递给子shell其余变量定义不受影响) 相关命令:sh命令 bash命令 ./脚本文件
脚本代码及演示过程如下
执行示例: 创建3个shell脚本 job1_export.sh --在脚本中定义变量a=123 job2_source.sh --在脚本中通过source命令执行job1_export.sh脚本,并输出变量a --由于在当前shell环境中执行调用,所以变量a的值即为job1脚本中a的赋值 job3_sh.sh --在脚本中通过sh命令执行job1_export.sh脚本,并输出变量a --由于新启进程子shell环境中执行调用,所以变量a的值并不会传递到父shell中,所以a没有被赋值
[root@localhost test]# ll
total 12
-rwxr--r--. 1 root root 35 Jul 17 22:16 job1_export.sh
-rwxr--r--. 1 root root 44 Jul 17 22:26 job2_source.sh
-rwxr--r--. 1 root root 40 Jul 17 22:25 job3_sh.sh
[root@localhost test]# cat job1_export.sh
#!/bin/bash
sleep 30s
export a=123
[root@localhost test]# cat job2_source.sh
#!/bin/bash
source ./job1_export.sh
echo $a
[root@localhost test]# cat job3_sh.sh
#!/bin/bash
sh ./job1_export.sh
echo $a
[root@localhost test]# echo $a
[root@localhost test]# sh job3_sh.sh #在其他窗口执行“ps -ef|grep -n '\.sh$'”会发现job3_sh.sh和job1_export.sh分别由各自进程执行
[root@localhost test]# echo $a
[root@localhost test]# sh job2_source.sh #在其他窗口执行“ps -ef|grep -n '\.sh$'”会发现只有一个job2_source.sh的执行进程
123
[root@localhost test]# echo $a
[root@localhost test]#
来源:oschina
链接:https://my.oschina.net/dingyibo/blog/3158892