【Linux 命令行與 shell 腳本編程大全】 6 使用 Linux 環(huán)境變量

6.1 什么是環(huán)境變量

  1. shell 中用來存儲(chǔ)有關(guān) shell 會(huì)話和工作環(huán)境的變量绞蹦,被叫做 環(huán)境變量( Environment Variable )
  2. 環(huán)境變量 被存儲(chǔ)在內(nèi)存中,方便程序或在 shell 中運(yùn)行的腳本能輕松訪問
  3. shell 中的環(huán)境變量分為兩類
  • 全局環(huán)境變量
  • 局部環(huán)境變量

6.1.1 全局環(huán)境變量

  1. 全局環(huán)境變量 之所以被叫做 全局 榜旦,是因?yàn)槠鋵?duì)于 父 shell 和所有生成的 子 shell 會(huì)話都是可見的
    • 局部環(huán)境變量 只對(duì)創(chuàng)建它們的 shell 可見
  2. Linux 內(nèi)置了很多默認(rèn)的 全局環(huán)境變量 幽七,會(huì)在用戶登錄 shell 時(shí)依次加載,這種 全局環(huán)境變量 被叫做 系統(tǒng)環(huán)境變量
  3. 系統(tǒng)環(huán)境變量 基本上都是使用全大寫字母溅呢,用來區(qū)別用戶自行創(chuàng)建的環(huán)境變量

6.1.1.1 env 命令和 printenv 命令查看全局環(huán)境變量

  1. 使用 env 命令和 printenv 命令可以查看當(dāng)前系統(tǒng)的全局環(huán)境變量澡屡,如下圖
image.png

6.1.1.2 echo 命令查看全局環(huán)境變量

使用 echo 命令也可以查看單個(gè)變量的值,但語法稍微復(fù)雜一點(diǎn)咐旧,需要在變量名稱前加一個(gè)美元符號(hào) 驶鹉,如下圖

6.1.2 局部環(huán)境變量

局部環(huán)境變量 只能在創(chuàng)建它們的會(huì)話中使用
Linux 同樣內(nèi)置了很多默認(rèn)的 局部環(huán)境變量

6.1.2.1 set 命令查看局部環(huán)境變量

Linux 沒有內(nèi)置專門用來查看 局部環(huán)境變量 的命令
使用 set 命令只是可以在執(zhí)行結(jié)果中順便看到 局部環(huán)境變量,如下圖
除了 局部環(huán)境變量 铣墨,還會(huì)顯示 全局環(huán)境變量 室埋,以及用戶自定義環(huán)境變量
顯示結(jié)果是按字母排序的

6.2 設(shè)置用戶定義變量

6.2.1 設(shè)置局部用戶定義變量

  1. 定義局部用戶變量不需要使用任何命令,直接定義一個(gè)變量名踏兜,并通過等號(hào)賦值即可词顾,如下圖
  • 定義變量并賦值后,可以使用 echo $variable 命令來顯示變量值
  • 如果變量值存在空格碱妆,就不能直接賦值,需要將變量值用雙引號(hào)包裹
image.png

6.2.2 export 命令設(shè)置全局環(huán)境變量

  1. 使用 export 命令并不能直接定義 全局環(huán)境變量
  2. 需要先定義一個(gè) 局部環(huán)境變量 昔驱,再使用 export 命令將這個(gè)變量提升為 全局環(huán)境變量 疹尾,如下圖
    • 父 shell 中定義的局部變量,使用 export 命令提升后骤肛,在 子 shell 中也能夠順利訪問
    • 需要注意的是 纳本,使用 export variable 命令時(shí),變量名前面不需要在美元符號(hào)
image.png

6.3 unset 命令刪除環(huán)境變量

  1. 使用 unset 命令可以刪除定義的環(huán)境變量腋颠,如下圖
    • 使用 unset variable 命令后繁成,就無法使用 echo $variable 訪問到對(duì)應(yīng)變量,說明變量已經(jīng)被刪除
image.png

設(shè)計(jì)環(huán)境變量名時(shí)候淑玫,什么時(shí)候使用巾腕,什么時(shí)候不使用面睛,記住:用到變量時(shí)尊搬,加$叁鉴;操作變量時(shí),不用加佛寿。

和修改變量一樣幌墓,在子shell中刪除全局變量后,無法將效果反映到父shell中冀泻。

6.5 設(shè)置 PATH 環(huán)境變量

  1. PATH 是一個(gè)很關(guān)鍵的 系統(tǒng)環(huán)境變量 常侣,它定義了 用于進(jìn)行命令和程序查找的目錄 ,如下圖
  • 在第 5 章介紹過 shell 命令分為 內(nèi)建命令 和 外部命令
  • 我們之所以能直接使用 外部命令 弹渔,就是因?yàn)樵?PATH 中將存放 外部命令 的目錄進(jìn)行了指定
  1. PATH 中的不同目錄袭祟,使用:進(jìn)行分隔
  2. 如果某個(gè)命令或程序的位置不包含在 PATH 指定的目錄中,則無法進(jìn)行全局調(diào)用
image.png

6.5.1 為 PATH 添加自定義目錄

  1. PATH 中的目錄默認(rèn)情況下都是系統(tǒng)預(yù)置的捞附,一般就包括用于存放 外部命令/bin 巾乳、/usr/bin/sbin 鸟召、/usr/sbin 目錄
  2. 如果想要讓其他程序的命令也能夠全局訪問胆绊,例如安裝 JDK 環(huán)境后一般都需要配置環(huán)境變量
  3. 只需要使用 PATH=$PATH:customCommandDirectory 即可
    • 這句命令的意思就是為 PATH 變量追加一個(gè)自定義的命令目錄,相當(dāng)于其他語言中的 += 操作
  4. 不過這種直接在 shell 會(huì)話中執(zhí)行的添加操作欧募,是一次性的 压状,如果當(dāng)前會(huì)話退出,或系統(tǒng)重啟跟继,這一次的配置操作也會(huì)隨之失效

6.6 定位系統(tǒng)環(huán)境變量

上一節(jié)介紹到為 PATH 添加自定義目錄种冬,但實(shí)現(xiàn)的效果是一次性的
要了解如何讓自定義的環(huán)境變量持久化存在與系統(tǒng)中,需要先了解 shell 的三種啟動(dòng)方式

  • 登錄式 shell :登錄時(shí)作為默認(rèn) shell 啟動(dòng)
  • 交互式 shell :在當(dāng)前 shell 會(huì)話中通過 bash 命令或 zsh 命令啟動(dòng)的各種類型 子 shell
  • 非交互式 shell :在當(dāng)前 shell 會(huì)話中通過腳本運(yùn)行的 shell

6.7 數(shù)組變量

環(huán)境變量可以作為數(shù)組使用舔糖。
數(shù)組:儲(chǔ)存多個(gè)值的變量娱两。
要給某個(gè)環(huán)境變量設(shè)置多個(gè)值,可以放在括號(hào)里金吗,值與值之間空格分隔十兢。


image.png

6.8 小結(jié)

  1. Linux 中的環(huán)境變量分為 全局環(huán)境變量局部環(huán)境變量
  2. 全局環(huán)境變量 可以在父子級(jí)之間訪問,但父級(jí)定義的 全局環(huán)境變量 對(duì)于子級(jí)來說是只讀的
  3. 局部環(huán)境變量 無法在父子級(jí)之間訪問摇庙,只能在定義該變量的會(huì)話中訪問
  4. PATH 是一個(gè)很關(guān)鍵的 全局環(huán)境變量 旱物,也叫 系統(tǒng)環(huán)境變量 ,其為 shell 執(zhí)行各種命令指定了搜索目錄
  5. PATH 支持自定義修改卫袒,可以將各種不是系統(tǒng)自帶的命令加入其中宵呛,從而實(shí)現(xiàn)命令的全局訪問
  6. shell 的啟動(dòng)方式分為三種,分別是 登錄式 shell 夕凝、交互式 shell 宝穗、非交互 shell
  7. /etc/profile 是 shell 的主啟動(dòng)文件户秤,在 登錄式 shell 啟動(dòng)時(shí)會(huì)被訪問
  8. .bashrc 是用于存放用戶自定義變量的持久化文件,在 登錄式 shell交互式 shell 啟動(dòng)時(shí)會(huì)被訪問
  9. 環(huán)境變量數(shù)組 是一個(gè)即不好用讽营,也不常用的特性

部分內(nèi)容轉(zhuǎn)載來自:作者:asing1elife 鏈接:http://www.reibang.com/p/dd034ef26dec

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虎忌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子橱鹏,更是在濱河造成了極大的恐慌膜蠢,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莉兰,死亡現(xiàn)場(chǎng)離奇詭異挑围,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)糖荒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門杉辙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捶朵,你說我怎么就攤上這事蜘矢。” “怎么了综看?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵品腹,是天一觀的道長。 經(jīng)常有香客問我红碑,道長舞吭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任析珊,我火速辦了婚禮羡鸥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忠寻。我一直安慰自己惧浴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布锡溯。 她就那樣靜靜地躺著赶舆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祭饭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天叙量,我揣著相機(jī)與錄音倡蝙,去河邊找鬼。 笑死绞佩,一個(gè)胖子當(dāng)著我的面吹牛寺鸥,可吹牛的內(nèi)容都是我干的猪钮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼胆建,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼烤低!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起笆载,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤扑馁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后凉驻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腻要,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年涝登,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雄家。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胀滚,死狀恐怖趟济,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咽笼,我是刑警寧澤顷编,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站褐荷,受9級(jí)特大地震影響勾效,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叛甫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一层宫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧其监,春花似錦萌腿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锌历,卻和暖如春贮庞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背究西。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工窗慎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓遮斥,卻偏偏與公主長得像峦失,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子术吗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容