shell脚本的2类执行方式及区别

拟墨画扇 提交于 2020-02-27 23:11:14

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]# 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!