<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kooyee ‘s blog

    開源軟件, 眾人努力的結晶, 全人類的共同財富
    posts - 103, comments - 55, trackbacks - 0, articles - 66
       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Linux的shell變量

    Posted on 2008-01-25 18:55 kooyee 閱讀(594) 評論(0)  編輯  收藏 所屬分類: Lniux/Unix

    Linux的變量可分為兩類:環境變量和本地變量

    環境變量,或者稱為全局變量,存在與所有的shell中,在你登陸系統的時候就已經有了相應的系統定義的環境變量了。Linux的環境變量具有繼承性,即子shell會繼承父shell的環境變量。

    本地變量,當前shell中的變量,很顯然本地變量中肯定包含環境變量。Linux的本地變量的非環境變量不具備繼承性。

    Linux中環境變量的文件

        當你進入系統的時候,linux就會為你讀入系統的環境變量,這些環境變量存放在什么地方,那就是環境變量的文件中。Linux中有很多記載環境變量的文件,它們被系統讀入是按照一定的順序的。

    1.    /etc/profile

    此文件為系統的環境變量,它為每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行。并從/etc/profile.d目錄的配置文件中搜集shell的設置。

        這個文件,是任何用戶登陸操作系統以后都會讀取的文件(如果用戶的shellcshtcshzsh,則不會讀取此文件),用于獲取系統的環境變量,只在登陸的時候讀取一次。

        假設用戶使用的是BASH,那么



    2.   
    /etc/bashrc

    在執行完/etc/profile內容之后,如果用戶的SHELL運行的是bash,那么接著就會執行此文件。另外,當每次一個新的bash shell被打開時,該文件被讀取。

        每個使用bash的用戶在登陸以后執行完/etc/profile中內容以后都會執行此文件,在新開一個bash的時候也會執行此文件。因此,如果你想讓每個使用bash的用戶每新開一個bash和每次登陸都執行某些操作,或者給他們定義一些新的環境變量,就可以在這個里面設置。



    3.   
    ~/.bash_profile

    每個用戶都可使用該文件輸入專用于自己使用的shell信息。當用戶登錄時,該文件僅僅執行一次,默認情況下,它設置一些環境變量,執行用戶的.bashrc文件。

        單個用戶此文件的修改只會影響到他以后的每一次登陸系統。因此,可以在這里設置單個用戶的特殊的環境變量或者特殊的操作,那么它在每次登陸的時候都會去獲取這些新的環境變量或者做某些特殊的操作,但是僅僅在登陸時。



    4.   
    ~/.bashrc

    該文件包含專用于單個人的bash shellbash信息,當登錄時以及每次打開一個新的shell,該該文件被讀取。

        單個用戶此文件的修改會影響到他以后的每一次登陸系統和每一次新開一個bash。因此,可以在這里設置單個用戶的特殊的環境變量或者特殊的操作,那么每次它新登陸系統或者新開一個bash,都會去獲取相應的特殊的環境變量和特殊操作。

    ~/.bash_logout

    當每次退出系統(退出bash shell),執行該文件。

    幾個命令

        envprintenv

        這兩個變量用于打印所有的環境變量:

    [root@devdb1 worksh]# env

    HOSTNAME=devdb1

    TERM=vt100

    ..........................................................

    OLDPWD=/root

    [root@devdb1 worksh]# printenv

    HOSTNAME=devdb1

    TERM=vt100

    ..........................................................

    OLDPWD=/root

    [root@devdb1 worksh]#

        另外,env變量還有其他的功能,如下:

    env [-i|-] [name=value] [command [argument]]

    這里的“-i”或者“-”,都是表示忽略繼承的環境變量;這里的name=value,用于指定本地變量對,可以有多組;整個命令的含義是,忽略繼承的環境變量,設定多組name變量,在此基礎上運行命令command。如

    env -i test="test" bash -c 'echo $SHELL; env'

    /bin/bash

    PWD=/home/oracle

    test=test

    SHLVL=1

    _=/bin/env

    很顯然,這里新運行bash并沒有繼承環境變量,但是卻設置了本地變量test

        set

        用于顯示與設置當前本地變量。單獨一個set就顯示了當前環境的所有的變量,它肯定包括環境變量和一些非環境變量,如:

    [oracle@devdb1 oracle]$ set

    BASH=/bin/bash

    BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")

    BASH_VERSION='2.05b.0(1)-release'

    BDUMP=/opt/oracle/admin/devdb/bdump

    COLORS=/etc/DIR_COLORS

    COLUMNS=132

    DIRSTACK=()

    EUID=500

    GROUPS=()

    G_BROKEN_FILENAMES=1

    HISTFILE=/home/oracle/.bash_history

    HISTFILESIZE=1000

    HISTSIZE=1000

    HOME=/home/oracle

    .............................

        set很有很多其他的選項,具體請參考man set

        unset

        用于清除變量。不管這個變量是環境變量還是本地變量,它都可以清除。

    -- 下面是清除本地變量

    [oracle@devdb1 oracle]$ set|grep myname

    myname=ilonng

    [oracle@devdb1 oracle]$ unset myname

    [oracle@devdb1 oracle]$ set|grep myname

    -- 下面是清除環境變量

    [oracle@devdb1 oracle]$ env|grep myname

    myname=ilonng

    [oracle@devdb1 oracle]$ unset myname

    [oracle@devdb1 oracle]$ env|grep myname

        export

    用于把變量變成當前shell和其子shell的環境變量,存活期是當前的shell及其子shell,因此重新登陸以后,它所設定的環境變量就消失了。如何將環境變量永久化?修改上面介紹的那幾個環境變量的配置文件。

    [oracle@devdb1 oracle]$ export myname=ilonng

    [oracle@devdb1 oracle]$ env|grep myname

    myname=ilonng

    [oracle@devdb1 oracle]$ bash

    [oracle@devdb1 oracle]$ env|grep myname

    myname=ilonng

    [oracle@devdb1 oracle]$ exit

    exit

    [oracle@devdb1 oracle]$ env|grep myname

    myname=ilonng

        source

    當直接執行一個腳本的時候,其實是在一個子shell環境運行的,即開啟了一個子shell來執行這個腳本,腳本執行完后該子shell自動退出。

    有沒有辦法在當前shell中執行一個腳本呢?使用source命令就可以讓腳本在當前shell中執行。如:

    [oracle@dbamonitor NBU]$ cat test.sh   -- 查看腳本內容,顯示變量內容

    echo $myname

    [oracle@dbamonitor NBU]$ echo $myname  -- 變量存在,內容是ilonng

    ilonng

    [oracle@dbamonitor NBU]$ set |grep myname -- 變量是本地變量

    myname=ilonng

    [oracle@dbamonitor NBU]$ env |grep myname -- 變量不是環境變量

    [oracle@dbamonitor NBU]$ sh test.sh  -- 直接執行,新開子shell,非環境變量的本地變量不具備繼承性,在子shell中不可見

      -- 這里什么都沒有輸出

    [oracle@dbamonitor NBU]$ source test.sh -- source命令,是腳本在當前shell中執行

    ilonng

    主站蜘蛛池模板: 亚洲av乱码中文一区二区三区| 99在线精品视频观看免费| 亚洲熟妇自偷自拍另欧美| 亚洲国产精品国自产拍电影| 亚洲精品视频在线看| 在线观看成人免费视频| 成人黄色免费网站| 久久er国产精品免费观看2| 精品国产福利尤物免费| 精品视频免费在线| 亚洲国产精品18久久久久久| 亚洲人成免费网站| 精品无码一区二区三区亚洲桃色 | 中文字幕亚洲综合久久| 久久伊人亚洲AV无码网站| 国产成人免费a在线视频色戒 | 亚洲人成人网站18禁| 亚洲乱码卡三乱码新区| 亚洲午夜久久久精品影院| 夜夜春亚洲嫩草影院| 国产成人亚洲综合无码| 一区国严二区亚洲三区| 国产一级一片免费播放i| 成人a免费α片在线视频网站| 成人奭片免费观看| 免费无码又爽又刺激聊天APP| 在线观看H网址免费入口| 精品香蕉在线观看免费| 成年人网站免费视频| 99久久99这里只有免费费精品| 99在线精品免费视频九九视| 国产免费不卡v片在线观看| 国产美女在线精品免费观看| 女人被弄到高潮的免费视频| 在线中文高清资源免费观看| 成年女人永久免费观看片| 免费在线黄色网址| 国产啪亚洲国产精品无码| 亚洲大尺度无码专区尤物| 亚洲丝袜美腿视频| 亚洲免费中文字幕|