linux非shell程序环境变量,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

可以看出上面的两个脚本程序中所用的环境变量和非环境变量对别的终端来说,均没有造成影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值