嵌入式 变量在shell脚本间的传递

原创 2013年12月02日 14:41:27
实现shell脚本中的变量传递
前几篇文章中已经介绍过局部变量和环境变量的含义,接下来我们来拓展下,看看变量怎样实现在shell脚本
中的传递shell脚本其实是用当前shell的子shell去执行的,所以在shell脚本中定义的普通变量只适用于当前
shell的子shell环境,也就是说在当前shell环境中不适用,也不适用于这个shell脚本的子shell。
在shell脚本中定义的环境变量可以传承给它的子shell,但是也不能传递给当前shell(不能逆向传递)
如果在一个脚本中需要执行另一个脚本,并且运用其中的变量,改如何申明变量呢,我们来看一个例子:
/root/test1.sh内容如下:
#!/bin/bash
aaa=yuanfaxiang
echo "test1:$aaa"

/root/test2.sh内容如下:
#!/bin/bash
/root/test1.sh
echo "test2:$aaa"
执行test2.sh结果如下:
[root@centos ~]# sh test2.sh
test1:yuanfaxiang
test2:
从结果可以看出test1.sh没有把变量aaa的值传递给test2.sh

我们把test2.sh改成:
#!/bin/bash
source /root/test1.sh
echo "test2:$aaa"
执行test2.sh结果如下:
[root@centos ~]# sh test2.sh
test1:yuanfaxiang
test2:yuanfaxiang
结果显示test2.sh继承了test1.sh中定义的变量aaa。
原因分析:在第一次执行test2.sh时,test1.sh被作为了test2.sh的子shell来执行,其中定义的变量只
在test1.sh中起效,不能逆向传递到test2.sh中;而在第二次执行中,采用source来执行test1.sh,意思
是直接把test1.sh在当前的test2.sh中执行,没有作为子shell去执行,test1.sh中定义的变量,就影响
到了test2.sh。

如果我们再建一个test3.sh
#!/bin/bash
echo "test3:$aaa"

把test2.sh改成:
#!/bin/bash
source /root/test1.sh
echo "test2:$aaa"
/root/test3.sh
执行test2.sh:
[root@shenji ~]# sh test2.sh
test1:yuanfaxiang
test2:yuanfaxiang
test3:
结果显示test3.sh没有继承test1.sh中申明的变量,因为source /root/test1.sh只是让test1.sh
中的变量在test2.sh中生效,aaa毕竟还是个普通局部变量,并不能被test3.sh这个子shell所继承,
所以我们可以想到环境变量,把aaa变成test2.sh这个脚本的环境变量,让test2.sh的子进程也能继承。

将test1.sh改成:
#!/bin/bash
export aaa=yuanfaxiang
echo "test1:$aaa"
执行test2.sh后有如下结果:
[root@shenji ~]# sh test2.sh
test1:yuanfaxiang
test2:yuanfaxiang
test3:yuanfaxiang
在test1.sh中声明了环境变量也就是全局变量,在test2.sh中用source执行test1.sh,将变量带到了
test2.sh中,并使之成为test2.sh执行过程中的环境变量,可以被test2.sh的子进程继承,起到了顺向
传递效果。

变量在shell脚本间的传递

前几篇文章中已经介绍过局部变量和环境变量的含义,接下来我们来拓展下,看看变量怎样实现在shell脚本 中的传递shell脚本其实是用当前shell的子shell去执行的,所以在shell脚本中定义的普...
  • dreamcoding
  • dreamcoding
  • 2013年01月19日 11:17
  • 10820

Shell脚本中参数传递方法常用有8种

Shell脚本中参数传递方法常用有8种 1. $# 传递到脚本的参数个数 2. $* 以一个单字符串显示所有向脚本传递的参数变量。与位置变量不同,此选项参数可超过9个 3. $$ 脚...
  • splenday
  • splenday
  • 2016年01月23日 18:29
  • 13162

linux -- shell脚本调用其他脚本,向shell脚本传递参数

Shell 脚本也可以看做是一个一个的函数,将命令进行了封装。 看看自己的例子: outTop.sh 是最顶层的。【负责调用其他的shell 脚本】out1.sh 是第2层。【被outTop.sh调...
  • TheSnowBoy_2
  • TheSnowBoy_2
  • 2016年09月04日 22:36
  • 3122

嵌入式 shell脚本的特殊符号的意义

shell字符串比较、判断是否为数字         二元比较操作符,比较变量或者比较数字。注意数字与字符串的区别。         整数比较         -eq       等于,如:if [ ...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:40
  • 542

Shell脚本实现动态配置IP与路由:解决嵌入式Android/Linux有线和无线网卡双网共存问题

Shell脚本实现动态配置IP与路由:解决嵌入式Android/Linux有线和无线网卡双网共存问题 网络环境及问题再现 命令行方式实现双网共存 Shell脚本自动实现双网共存(根据网络环境动态配置I...
  • HowieXue
  • HowieXue
  • 2017年07月23日 17:17
  • 1781

嵌入式 shell脚本赋值的5种方法

1. Shell中的变量类型 Shell中的变量可以分为环境变量、位置变量、预定义的特殊变量以及用户自定义变量、 2. 环境变量 Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:56
  • 550

变量在shell脚本间的传递

前几篇文章中已经介绍过局部变量和环境变量的含义,接下来我们来拓展下,看看变量怎样实现在shell脚本 中的传递shell脚本其实是用当前shell的子shell去执行的,所以在shell脚本中定义的...
  • skyboy11yk
  • skyboy11yk
  • 2013年09月10日 20:11
  • 564

变量在shell脚本间的传递

前几篇文章中已经介绍过局部变量和环境变量的含义,接下来我们来拓展下,看看变量怎样实现在shell脚本中的传递shell脚本其实是用当前shell的子shell去执行的,所以在shell脚本中定义的普通...
  • moqingxinai2008
  • moqingxinai2008
  • 2016年12月28日 16:34
  • 129

嵌入式开发之linux基础第六天学习笔记 shell脚本编程(一)

Linux基础第六天学习笔记   shell脚本编程: 按照发展先后划分: 机器语言 010101 汇编语言 助记符 C语言   高级语言   安装执行类型语言: 编译型语言 解释性语言(脚本) p...
  • wang161019
  • wang161019
  • 2016年10月24日 23:32
  • 356

嵌入式开发之linux基础第七天学习笔记 shell脚本编程(二)

linux基础第七天笔记 SHELL脚本编程(二) 语句: 具有特殊功能的语句 输入语句:read 输出语句:echo 控制语句:tput 测试语句:test 表达式     测试表达式的正确与否 ...
  • wang161019
  • wang161019
  • 2016年10月27日 09:32
  • 225
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 变量在shell脚本间的传递
举报原因:
原因补充:

(最多只允许输入30个字)