shell脚本调用的几种不同方法及调用效果

摆事实

脚本准备

脚本名称 name.sh call-name.sh
相互调用关系见下面的代码

[root@server maldetect-1.6.4]# cat name.sh call-name.sh 
#!/bin/bash
myname="suyi-vs-shuyi"
yourname="miaorenfeng"
echo "$myname + $yourname"

#!/bin/bash
echo "============sh 运行脚本=========================" 
echo "Who are you?"
sh name.sh
echo "I'm $myname"
echo "============source运行脚本======================" 
echo "Who am I?"
source $PWD/name.sh
echo "You are $yourname"
echo "=============exec运行脚本=======================" 
exec $PWD/name.sh >./names.txt
echo `ps -e | grep name.sh | awk '{print $1}'`
echo "My name is $myname ,your name is $yourname "

修改权限

为了后面执行不会提示权限问题(特别是name.sh),执行下面的命令修改下权限(可以先查看name.sh没有执行权限,有了可以省略该步骤):

chmod + name.sh call-name.sh

脚本执行

[root@server maldetect-1.6.4]# sh call-name.sh 
============sh 运行脚本=========================
Who are you?
suyi-vs-shuyi + miaorenfeng
I'm 
============source运行脚本======================
Who am I?
suyi-vs-shuyi + miaorenfeng
You are miaorenfeng
=============exec运行脚本=======================
[root@server maldetect-1.6.4]# cat names.txt 
suyi-vs-shuyi + miaorenfeng
[root@server maldetect-1.6.4]# 

由事实讲道理

观察以上的脚本及运行结果,理解sh、source、exec调用脚本后的不同效果

调用方式效果说明程序验证
sh(bash、./)sh、bash、./调用效果相同,调用之后都会产生子shell,父脚本中不能引用子shell中的变量从返回值中就可以看到效果,I’m 后面的值为空,说明引用了一个不存在的变量
source调用脚本后不会产生子shell,都在同一个shell中,可以引用被调用脚本中的变量从返回值中就可以看到效果,You are miaorenfeng,说明变量使用正常
exec脚本执行后不会再继续执行父脚本中的其他命令执行脚本以后之后的语句并没有执行,说明使用exec name.sh后将不再执行之后的语句,但是cat names.txt 中是有值的,说明exec调用脚本正常,符合预期
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值