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

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

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

    kooyee ‘s blog

    開(kāi)源軟件, 眾人努力的結(jié)晶, 全人類(lèi)的共同財(cái)富
    posts - 103, comments - 55, trackbacks - 0, articles - 66
       :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Linux的shell變量

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

    Linux的變量可分為兩類(lèi):環(huán)境變量和本地變量

    環(huán)境變量,或者稱(chēng)為全局變量,存在與所有的shell中,在你登陸系統(tǒng)的時(shí)候就已經(jīng)有了相應(yīng)的系統(tǒng)定義的環(huán)境變量了。Linux的環(huán)境變量具有繼承性,即子shell會(huì)繼承父shell的環(huán)境變量。

    本地變量,當(dāng)前shell中的變量,很顯然本地變量中肯定包含環(huán)境變量。Linux的本地變量的非環(huán)境變量不具備繼承性。

    Linux中環(huán)境變量的文件

        當(dāng)你進(jìn)入系統(tǒng)的時(shí)候,linux就會(huì)為你讀入系統(tǒng)的環(huán)境變量,這些環(huán)境變量存放在什么地方,那就是環(huán)境變量的文件中。Linux中有很多記載環(huán)境變量的文件,它們被系統(tǒng)讀入是按照一定的順序的。

    1.    /etc/profile

    此文件為系統(tǒng)的環(huán)境變量,它為每個(gè)用戶(hù)設(shè)置環(huán)境信息,當(dāng)用戶(hù)第一次登錄時(shí),該文件被執(zhí)行。并從/etc/profile.d目錄的配置文件中搜集shell的設(shè)置。

        這個(gè)文件,是任何用戶(hù)登陸操作系統(tǒng)以后都會(huì)讀取的文件(如果用戶(hù)的shellcshtcshzsh,則不會(huì)讀取此文件),用于獲取系統(tǒng)的環(huán)境變量,只在登陸的時(shí)候讀取一次。

        假設(shè)用戶(hù)使用的是BASH,那么



    2.   
    /etc/bashrc

    在執(zhí)行完/etc/profile內(nèi)容之后,如果用戶(hù)的SHELL運(yùn)行的是bash,那么接著就會(huì)執(zhí)行此文件。另外,當(dāng)每次一個(gè)新的bash shell被打開(kāi)時(shí),該文件被讀取。

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



    3.   
    ~/.bash_profile

    每個(gè)用戶(hù)都可使用該文件輸入專(zhuān)用于自己使用的shell信息。當(dāng)用戶(hù)登錄時(shí),該文件僅僅執(zhí)行一次,默認(rèn)情況下,它設(shè)置一些環(huán)境變量,執(zhí)行用戶(hù)的.bashrc文件。

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



    4.   
    ~/.bashrc

    該文件包含專(zhuān)用于單個(gè)人的bash shellbash信息,當(dāng)?shù)卿洉r(shí)以及每次打開(kāi)一個(gè)新的shell時(shí),該該文件被讀取。

        單個(gè)用戶(hù)此文件的修改會(huì)影響到他以后的每一次登陸系統(tǒng)和每一次新開(kāi)一個(gè)bash。因此,可以在這里設(shè)置單個(gè)用戶(hù)的特殊的環(huán)境變量或者特殊的操作,那么每次它新登陸系統(tǒng)或者新開(kāi)一個(gè)bash,都會(huì)去獲取相應(yīng)的特殊的環(huán)境變量和特殊操作。

    ~/.bash_logout

    當(dāng)每次退出系統(tǒng)(退出bash shell)時(shí),執(zhí)行該文件。

    幾個(gè)命令

        envprintenv

        這兩個(gè)變量用于打印所有的環(huán)境變量:

    [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”或者“-”,都是表示忽略繼承的環(huán)境變量;這里的name=value,用于指定本地變量對(duì),可以有多組;整個(gè)命令的含義是,忽略繼承的環(huán)境變量,設(shè)定多組name變量,在此基礎(chǔ)上運(yùn)行命令command。如

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

    /bin/bash

    PWD=/home/oracle

    test=test

    SHLVL=1

    _=/bin/env

    很顯然,這里新運(yùn)行bash并沒(méi)有繼承環(huán)境變量,但是卻設(shè)置了本地變量test

        set

        用于顯示與設(shè)置當(dāng)前本地變量。單獨(dú)一個(gè)set就顯示了當(dāng)前環(huán)境的所有的變量,它肯定包括環(huán)境變量和一些非環(huán)境變量,如:

    [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很有很多其他的選項(xiàng),具體請(qǐng)參考man set

        unset

        用于清除變量。不管這個(gè)變量是環(huán)境變量還是本地變量,它都可以清除。

    -- 下面是清除本地變量

    [oracle@devdb1 oracle]$ set|grep myname

    myname=ilonng

    [oracle@devdb1 oracle]$ unset myname

    [oracle@devdb1 oracle]$ set|grep myname

    -- 下面是清除環(huán)境變量

    [oracle@devdb1 oracle]$ env|grep myname

    myname=ilonng

    [oracle@devdb1 oracle]$ unset myname

    [oracle@devdb1 oracle]$ env|grep myname

        export

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

    [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

    當(dāng)直接執(zhí)行一個(gè)腳本的時(shí)候,其實(shí)是在一個(gè)子shell環(huán)境運(yùn)行的,即開(kāi)啟了一個(gè)子shell來(lái)執(zhí)行這個(gè)腳本,腳本執(zhí)行完后該子shell自動(dòng)退出。

    有沒(méi)有辦法在當(dāng)前shell中執(zhí)行一個(gè)腳本呢?使用source命令就可以讓腳本在當(dāng)前shell中執(zhí)行。如:

    [oracle@dbamonitor NBU]$ cat test.sh   -- 查看腳本內(nèi)容,顯示變量?jī)?nèi)容

    echo $myname

    [oracle@dbamonitor NBU]$ echo $myname  -- 變量存在,內(nèi)容是ilonng

    ilonng

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

    myname=ilonng

    [oracle@dbamonitor NBU]$ env |grep myname -- 變量不是環(huán)境變量

    [oracle@dbamonitor NBU]$ sh test.sh  -- 直接執(zhí)行,新開(kāi)子shell,非環(huán)境變量的本地變量不具備繼承性,在子shell中不可見(jiàn)

      -- 這里什么都沒(méi)有輸出

    [oracle@dbamonitor NBU]$ source test.sh -- source命令,是腳本在當(dāng)前shell中執(zhí)行

    ilonng

    主站蜘蛛池模板: 国产福利在线观看免费第一福利| 又粗又大又长又爽免费视频| 亚洲AV无码国产丝袜在线观看| 无码人妻一区二区三区免费视频 | 亚洲精品国产日韩| 亚洲欧洲免费无码| 一本色道久久88亚洲精品综合 | 亚洲国产精品一区二区第四页| 黄色片网站在线免费观看| 亚洲av高清在线观看一区二区 | 亚洲另类自拍丝袜第五页 | 成人免费无码大片A毛片抽搐| 亚洲精品无码少妇30P| 日韩a级毛片免费视频| 国产亚洲精品精品精品| 亚洲免费视频一区二区三区| 国产做国产爱免费视频| 久久久久亚洲Av片无码v| 99国产精品视频免费观看| 亚洲国产成人久久三区| 国产极品粉嫩泬免费观看 | 亚洲日本人成中文字幕| 天天看免费高清影视| 久久亚洲中文字幕无码| 亚洲一区二区三区无码中文字幕| 麻豆精品成人免费国产片| 亚洲国产精品成人综合色在线婷婷| 四虎影院免费在线播放| 国产免费伦精品一区二区三区| 亚洲成a人片在线观看中文动漫 | 久草在视频免费福利| 在线看亚洲十八禁网站| 亚洲国产精品乱码一区二区| 成年在线观看网站免费| 高潮毛片无遮挡高清免费视频| 亚洲成A∨人片在线观看不卡| AV无码免费永久在线观看| 日韩在线观看免费完整版视频| 亚洲成人中文字幕| 免费看美女让人桶尿口| 2022免费国产精品福利在线|