在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
|
阅读(4152) | 评论(0) | 转发(0) |