shell与export命令
围绕以下⼏个问题来学习export命令:
1.什么是export命令?
2.为什么要⽤export命令?
3.怎么使⽤export命令?
1.什么是export命令?
♦⽤户登录到Linux系统后,系统将启动⼀个⽤户shell。在这个shell中,可以使⽤shell命令或声明变量,也可以创建并运⾏ shell脚本程序。运⾏shell脚本程序时,系统将创
建⼀个⼦shell。此时,系统中将有两个shell,⼀个是登录时系统启动的shell,另⼀个是系统为运⾏脚本程序创建的shell。当⼀个脚本程序运⾏完毕,它的脚本shell将终⽌,可
以返回到执⾏该脚本之前的shell。从这种意义上来说,⽤户可以有许多 shell,每个shell都是由某个shell(称为⽗shell)派⽣的。
在⼦ shell中定义的变量只在该⼦shell内有效。如果在⼀个shell脚本程序中定义了⼀个变量,当该脚本程序运⾏时,这个定义的变量只是该脚本程序内的⼀个局部变量,其他的
shell不能引⽤它,要使某个变量的值可以在其他shell中被改变,可以使⽤export命令对已定义的变量进⾏输出。 export命令将使系统在创建每⼀个新的shell时定义这个变量的⼀
个拷贝。这个过程称之为变量输出。
[例]在本例中,变量myfile是在dispfile脚本程序中定义的。然后⽤export命令将变量myfile输出⾄任何⼦shell,例如当执⾏printfile脚本程序时产⽣的⼦shell。printfile脚本程序
时产⽣的⼦shell。
2.为什么要⽤export命令?
♦为了是是我们定义⼀个变量时可以在⼦shell中被调⽤,⽽不需要重复去定义。
3.怎么使⽤export命令?
解释:♦Linux export命令⽤于设置或显⽰环境变量。
♦在shell中执⾏程序时,shell会提供⼀组环境变量。export可新增,修改或删除环境变量,供后续执⾏的程序使⽤。export的效⼒仅及于该次登陆操作。
语法:
export [-fnp][变量名称]=[变量设置值]
参数说明:
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执⾏环境中。
-p 列出所有的shell赋予程序的环境变量。
实例
列出当前所有的环境变量
[root@localhost ~]# export -p
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/home/zszc"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x KDE_IS_PRELINKED="1"
declare -x KDE_NO_IPV6="1"
declare -x LANG="zh_CN.UTF-8"
declare -x LC_ALL="zh_CN.GBK"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*=01;32:*.btm=01;32:*.ba declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zs declare -x PWD="/home/zszc"
declare -x QTDIR="/usr/lib64/qt-3.3"
declare -x QTINC="/usr/lib64/qt-3.3/include"
declare -x QTLIB="/usr/lib64/qt-3.3/lib"
定义环境变量;
[root@localhost ~]# export laolao#定义环境变量
[root@localhost ~]# export -p
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/home/zszc"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x KDE_IS_PRELINKED="1"
declare -x KDE_NO_IPV6="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_CLIENT="192.168.113.206 17527 22"
declare -x SSH_CONNECTION="192.168.113.206 17527 192.168.44.33 22"
declare -x SSH_TTY="/dev/pts/1"
declare -x TERM="vt100"
declare -x USER="root"
declare -x a="echo hollo li"
declare -x b="echo hollo qiang"
declare -x c="echo huahua"
declare -x laolao
declare -x test="value1"
定义环境变量赋值
[root@localhost ~]# export laolao=2
[root@localhost ~]# export -p
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/home/zszc"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x KDE_IS_PRELINKED="1"
declare -x KDE_NO_IPV6="1"
declare -x LANG="zh_CN.UTF-8"
declare -x LC_ALL="zh_CN.GBK"
declare -x TERM="vt100"
declare -x USER="root"
declare -x a="echo hollo li"
declare -x b="echo hollo qiang"
declare -x c="echo huahua"
declare -x laolao="2"
declare -x test="value1"
[root@localhost ~]#
♦得出的结论是:
•1、执⾏脚本时是在⼀个⼦shell环境运⾏的,脚本执⾏完后该⼦shell⾃动退出;
•2、⼀个shell中的系统环境变量才会被复制到⼦ shell中(⽤export定义的变量);
•3、⼀个shell中的系统环境变量只对该shell或者它的⼦shell有效,该shell结束时变量消失(并不能返回到⽗shell中)。
•4、不⽤export定义的变量只对该shell有效,对⼦shell也是⽆效的。
实例:
[root@localhost ~]# vim liqiang.shlinuxshell脚本怎么运行
export a='echo hollo li'
b='echo hollo qiang'
./liqiang-3.sh
[root@localhost ~]# vim liqiang-3.sh
echo 看看这⾥调⽤⼏次
echo 调⽤⼀次就对了
echo $a
echo $b
bash
输出结果:
[root@localhost ~]# ./liqiang.sh
看看这⾥调⽤⼏次
调⽤⼀次就对了
echo hollo li
实例2:在⼦shell中定义变量,在⽗shell中调⽤。
[root@localhost ~]# vim liqiang-3.sh
echo 看看这⾥调⽤⼏次
echo 调⽤⼀次就对了
echo $a
echo $b
c='echo huahua'
bash
~
root@localhost ~]# vim liqiang.sh
export a='echo hollo li'
export b='echo hollo qiang'
./liqiang-3.sh
echo $c
运⾏结果:
[root@localhost ~]# ./liqiang.sh
看看这⾥调⽤⼏次
调⽤⼀次就对了
echo hollo li
echo hollo qiang
#c没有被调⽤
[root@localhost ~]#
实例3:在⼦shell中⽤export导出依然不会被⽗shell调⽤c
[root@localhost ~]# vim liqiang-3.sh
echo 看看这⾥调⽤⼏次
echo 调⽤⼀次就对了
echo $a
echo $b
export c='echo huahua'
bash
运⾏结果:
[root@localhost ~]# ./liqiang.sh
看看这⾥调⽤⼏次
调⽤⼀次就对了
echo hollo li
echo hollo qiang
[root@localhost ~]#
对source这块理解的还不是很清,只知道source把多有的脚本都拉进⼀个shell中进⾏执⾏,只有有⼀个PID,那这个时候所有的变量都应该是可以随便使⽤的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论