Chinaunix首页 | 论坛 | 博客
  • 博客访问: 579085
  • 博文数量: 80
  • 博客积分: 2393
  • 博客等级: 大尉
  • 技术积分: 1434
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-03 21:46
个人简介

己所不欲勿施于人!

文章分类

全部博文(80)

文章存档

2017年(1)

2016年(9)

2014年(1)

2013年(17)

2012年(5)

2011年(13)

2010年(9)

2009年(8)

2008年(17)

分类: LINUX

2010-02-07 10:42:45

     在shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。
 
  exportfile1.sh 清单

#!/bin/bash
#定义变量


myname="liwei"

#export
export myname
echo $myname
./exportfile2.sh 
#此时运行的脚本exportfile2.sh是该脚本的一个子shell
exit 0

exportfile2.sh 清单

#!/bin/bash
#此处直接引用变量myfile
echo $myfile
exit 0


运行结果:

[oracle@orclrhel4 ~]$ ./exportfile1.sh
liwei
liwei


这里有几个问题需要澄清:

1、export 命令输出的变量只能用于本身的shell及其子shell中。

   比如上例中,exportfile2.sh 必须在exportfile1.sh 中执行才能正确的输出变量myname的值。如果等待file1退出后执行file2,那两个脚本相当于同一个父shell的两个子shell,其变量是不能够被引用的。

2、如果想要子shell中的变量影响到其父shell,那么用source scriptname来运行脚本。

   直接执行一个脚本文件是在一个子shell中运行的,而source则是在当前shell环境中运行的。manual原文:Read
and execute commands from filename in the current shell environment and
return the exit status of the last command executed from filename。

   由此可以看出,当我们用source scriptname 运行脚本时。即使不用export 也能令脚本中定义的变量影响其父shell及子shell。

3、登录系统成功以后,linux将启动一个shell。并且读取.bash_profile (或者.bash_login)文件,对当前用户的环境变量进行设置。登录成功以后便可以使用这些变量在当前的shell以及之后的子shell当中。如果修改或者增加了某些变量,也要是用source scriptname (或重新登录)使变量生效。
   该文件中也包含有export 

.bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
umask 022
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
LD_LIBRARY_PATH=/usr/lib:/usr/X11R6/lib
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db_1
ORACLE_SID=orcl
PATH=$ORACLE_HOME/bin:$PATH
SQLPATH=$ORACLE_BASE/admin/orcl/create
export PATH LD_LIBRARY_PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID SQLPATH
export LANG=zh_CN.GB18030
unset USERNAME


阅读(3272) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~