linux下shell脚本中环境变量和非环境变量的理解
环境为:
Linux zhoumeng 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:50:42 UTC 2011 i686 i686 i386 GNU/Linux
ubuntu 11.10
有如下两个shell脚本:
A.sh:(调用B.sh)
1 #!/bin/bash
2 #program:
3 #this program shows how to write a script.
4 #History:
5 #2012/01/31 zhoumeng
6 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
7 export PATH
8 name=-al
9 #export name
10 echo -e "hello world!\a \n"
11 ./B.sh
B.sh:#(运行ls -al命令)
1 #!/bin/bash
2 #program:
3 #this program shows how to write a script.
4 #History:
5 #2012/01/31 zhoumeng
6 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
7 export PATH
8 ls $name
B.sh中引用了A.sh中的变量$name
运行情况:
一、运行命令:./A.sh
输出结果:
hello world!
deleteAllFileButOne.sh example.sh helloworld.sh pp.sh sh05.sh sh06.sh
可以看到B.sh中的命令 ls $name并没有成功执行,此时运行命令:echo $name 查看变量name的值,输出结果为空,也就是说此变量并没有设置
二、运行命令:. ./A.sh
输出结果:
hello world!
deleteAllFileButOne.sh example.sh helloworld.sh pp.sh sh05.sh sh06.sh
同样可以看到B.sh中的命令 ls $name并没有成功执行,但此时运行命令:echo $name 查看变量name的值,输出结果为:
-al
也就是说此变量设置成功
另,将A.sh中第9行 改为:export name,即,使这一句生效,同样按照以上两步骤运行
三、运行命令:./A.sh
输出结果:
hello world!
总用量 32
drwxrwxr-x 2 zhoumeng zhoumeng 4096 2012-02-13 10:50 .
drwxr-xr-x 61 zhoumeng zhoumeng 4096 2012-02-13 08:39 ..
-rw-rw-r-- 1 zhoumeng zhoumeng 248 2012-01-14 15:52 deleteAllFileButOne.sh
-rwxrwxr-x 1 zhoumeng zhoumeng 257 2012-02-13 10:50 example.sh
-rw-rw-r-- 1 zhoumeng zhoumeng 476 2012-01-14 15:51 helloworld.sh
-rwxrwxrwx 1 zhoumeng zhoumeng 189 2012-02-13 10:22 pp.sh
-rw-rw-r-- 1 zhoumeng zhoumeng 753 2012-01-31 11:33 sh05.sh
-rw-rw-r-- 1 zhoumeng zhoumeng 428 2012-01-31 12:17 sh06.sh
B.sh中的命令 ls $name 执行成功了,此时运行echo $name,输出结果为:
此时为空,说明该变量并没有设置成功。
四、运行命令:. ./A.sh
输出结果:
hello world!
总用量 32
drwxrwxr-x 2 zhoumeng zhoumeng 4096 2012-02-13 10:50 .
drwxr-xr-x 61 zhoumeng zhoumeng 4096 2012-02-13 08:39 ..
-rw-rw-r-- 1 zhoumeng zhoumeng 248 2012-01-14 15:52 deleteAllFileButOne.sh
-rwxrwxr-x 1 zhoumeng zhoumeng 257 2012-02-13 10:50 example.sh
-rw-rw-r-- 1 zhoumeng zhoumeng 476 2012-01-14 15:51 helloworld.sh
-rwxrwxrwx 1 zhoumeng zhoumeng 189 2012-02-13 10:22 pp.sh
-rw-rw-r-- 1 zhoumeng zhoumeng 753 2012-01-31 11:33 sh05.sh
-rw-rw-r-- 1 zhoumeng zhoumeng 428 2012-01-31 12:17 sh06.sh
B.sh中的命令 ls $name 执行成功了,此时运行echo $name,输出结果为:
-al
此变量设置成功
由以上可知:
bash程序中,子程序只能继承父程序的环境变量,不能共享父程序的自定义变量。若子程序使用父程序的变量,则该变量必须用export来更改为环境变量。
另:执行sh文件的方式:./A.sh 和 . ./A.sh在变量有效范围方面的区别
(一)./A.sh:程序中定义的变量(无论是否声明为环境变量还是非环境变量)只在该程序运行阶段有效,该程序运行结束后变量无效。
(二). ./A.sh:程序中定义的变量(无论是否声明为环境变量还是非环境变量)在整个终端都是有效,对于环境变量来讲,好像用 . 的方式将环境变量注册到系统一样,一直有效,直至该终端exit。 有以下验证:
另起一个终端:有以下输出
zhoumeng@zhoumeng:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jdk_6u26/java-6-sun/bin:/home/zhoumeng/android_devople/android-sdk/platform-tools:/home/zhoumeng/android_devople/android-sdk/tools
zhoumeng@zhoumeng:~$ echo $name
zhoumeng@zhoumeng:~$ echo $me
可以看出上面的两个脚本程序中所用的环境变量和非环境变量对别的终端来说,均没有造成影响。
分享到:
相关推荐
linux初学者写的小脚本,用来配置JAVA环境变量,纯属练手,不喜勿喷
<Linux>shell 脚本环境变量问题深层探索【实践+实验】
通过shell脚本一键实现jdk8的安装和环境变量配置工作。
在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。 语法 export [-fnp][变量名称]=[变量设置值] 参数说明: -f 代表...
Linux Shell脚本系列教程(三):变量和环境变量.docx
有一些特殊的变量会被shell环境和操作系统保留,用来存储一些特别的值,这类变量就称为环境变量,相信大家对环境变量也并不陌生,因为即使在windows操作系统上,也存在环境变量。 二、普通变量 普通变量可以通过下列...
linux一键安装jdk 1.8 并且 配置环境变量 shell 脚本
因为我在linux环境下执行shell脚本时sqlldr命令和sqlplus命令是正常执行的,没有任何问题,但是在java代码中调用脚本时却报错,所有排除了其他原因,只可能是环境变量的问题, 于是我把oracle的所有环境变量直接复制...
主要介绍了Linux Shell脚本系列教程(四):使用函数添加环境变量,本文对环境变量的一知识作了介绍,并给出普通添加环境变量和使用函数添加环境变量的方法,需要的朋友可以参考下
Linux Shell脚本系列教程(四):使用函数添加环境变量.docx
从DB中取检索值传递给shell,生成环境变量 1. 编写myshellpara.sql 通过spool 执行一个SQL读取所要的值,结果保存在myshellvar_export.sh set feedback off; set heading off; set pagesize 0; set linesize 1000; ...
3.执行shell脚本 4.接收用户输入并赋值给变量 5.Bash中的变量 1. 环境变量 1.1HOME 2.2LANG 3.3SHELL 4.4PATH 5.5PS1 6.6PS2 7.7只读环境变量 8.8永久修改环境变量 2. 位置变量 3. 预定义变量 4. 自定义变量 1.1...
Linux运维-运维系统服务04-Shell脚本d2-shell基础知识-10环境变量分类.mp4
《Shell脚本专家指南》中的大部分脚本已经在以可靠性为关键因素的生产环境下,经历了多年的不断锤炼和改进。因此,《Shell脚本专家指南》对于那些希望在案头放一本案例精选的读者来说,将会是最佳的参考资料。 这里...
linux下jar包启动脚本,实测可用,只需修改你的环境变量和应用名称
Shell是一种具备特殊功能的程序, 它是介于使用者和 UNIX/Linux 操作系统之核心程序(kernel)间的一个接口。 为了对用户屏蔽内核的复杂性,也为了保护内核以免用户误操作造成损害,在内核的周围建了一个外壳(shell)...
Tony老师聊shell——环境变量配置文件