圍繞以下幾個問題來學習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:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:" 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/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/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/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/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/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/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/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/zszc/bin" 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.sh
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,那這個時候所有的變量都應該是可以隨便使用的。