Linux 環(huán)境變量

一、分類

按照生命周期分類:

  • 永久的環(huán)境變量:分為系統(tǒng)級(jí)和用戶級(jí)九府,需要手動(dòng)修改相關(guān)配置文件
  • 臨時(shí)的環(huán)境變量:使用 export 命令在終端聲明冗荸,只在當(dāng)前終端有效,關(guān)閉終端后變量失效

按照作用域分類:

  • 系統(tǒng)環(huán)境變量:對(duì)所有用戶所有 shell 均有效
  • 用戶環(huán)境變量:只對(duì)某個(gè)用戶有效
  • shell 環(huán)境變量:只在某個(gè) shell 中有效杜窄,即臨時(shí)環(huán)境變量

二肠骆、環(huán)境變量與自定義變量

環(huán)境變量是相對(duì)于進(jìn)程而言的概念,可以被子進(jìn)程繼承
啟動(dòng)終端就會(huì)啟動(dòng) shell塞耕,shell 就是一個(gè)進(jìn)程蚀腿,在 shell 里設(shè)置的環(huán)境變量會(huì)被子進(jìn)程繼承。它對(duì)當(dāng)前進(jìn)程及其子進(jìn)程有效扫外,對(duì)父進(jìn)程無效

自定義變量是相對(duì)于 shell 中的命令而言的概念莉钙,通常后面會(huì)接一個(gè)命令,這種變量不會(huì)被子進(jìn)程繼承筛谚。它只對(duì)當(dāng)前進(jìn)程有效磁玉,對(duì)父進(jìn)程和子進(jìn)程均無效

上面的各種分類,都是針對(duì)環(huán)境變量而言

mcdx@ubuntu:~$ shiyanlou=1  # 自定義變量驾讲,只對(duì)當(dāng)前進(jìn)程有效
mcdx@ubuntu:~$ set | grep shiyanlou
shiyanlou=1
mcdx@ubuntu:~$ env | grep shiyanlou
mcdx@ubuntu:~$ export | grep shiyanlou
mcdx@ubuntu:~$ name=world  # 自定義變量
mcdx@ubuntu:~$ echo hello $name
hello world

mcdx@ubuntu:~$ export shiyanlou=2  # 環(huán)境變量蚊伞,對(duì)當(dāng)前進(jìn)程及其子進(jìn)程均有效
mcdx@ubuntu:~$ set | grep shiyanlou
_=shiyanlou
shiyanlou=2
mcdx@ubuntu:~$ env | grep shiyanlou
shiyanlou=2
mcdx@ubuntu:~$ export | grep shiyanlou
declare -x shiyanlou="2"
  • set 顯示當(dāng)前 shell 中的所有變量,包括自定義變量
  • env 顯示與當(dāng)前用戶有關(guān)的所有環(huán)境變量
  • export 顯示的是從 shell 導(dǎo)入到用戶環(huán)境的變量吮铭,也就是從自定義變量變成了用戶級(jí)環(huán)境變量的變量

三时迫、創(chuàng)建各種變量的命令

3.1、export 將自定義變量升級(jí)為用戶級(jí)環(huán)境變量

上面說的 export 的顯示環(huán)境變量的作用谓晌,就是源于此
只要 export 里有的掠拳,env 里都有
這個(gè)就不舉例了

3.2、read 讀取標(biāo)準(zhǔn)輸入并將其賦值給自定義變量

mcdx@ubuntu:~$ read xxx
world
mcdx@ubuntu:~$ echo hello $xxx
hello world
mcdx@ubuntu:~$ read James Nash  # 一次設(shè)置多個(gè)
Leborn Steve
mcdx@ubuntu:~$ echo $James $Nash 
Leborn Steve

3.3纸肉、declare 定義自定義變量和用戶級(jí)環(huán)境變量

mcdx@ubuntu:~$ declare Durant=Kevin  # 自定義變量
mcdx@ubuntu:~$ echo $Durant 
Kevin
mcdx@ubuntu:~$ set | grep Durant
Durant=Kevin
mcdx@ubuntu:~$ env | grep Durant  # env 是保存用戶級(jí)環(huán)境變量的溺欧,顯然找不到

mcdx@ubuntu:~$ declare -x Curry=Stephen  # -x 選項(xiàng)定義用戶級(jí)環(huán)境變量
mcdx@ubuntu:~$ echo $Curry 
Stephen
mcdx@ubuntu:~$ set | grep Curry
Curry=Stephen
mcdx@ubuntu:~$ env | grep Curry  # 找到了
Curry=Stephen

四、引用變量

4.1毁靶、引號(hào)的使用

shiyanlou:~/ $ u1=s1                                      
shiyanlou:~/ $ u2=hello_$u1                          
shiyanlou:~/ $ echo $u2      
hello_s1
shiyanlou:~/ $ u2="hello_$u1_world"     
shiyanlou:~/ $ echo $u2    
hello_
shiyanlou:~/ $ u2="hello_$u1""_world" 
shiyanlou:~/ $ echo $u2  
hello_s1_world
shiyanlou:~/ $ u2='hello_$u1''_world'  
shiyanlou:~/ $ echo $u2   
hello_$u1_world

4.2胧奔、變量擴(kuò)展
引用變量除了使用 $var 格式直接引用變量之外,還可以使用 ${var} 的方式對(duì)變量進(jìn)行擴(kuò)展预吆。常見的形式如下表:

表達(dá)式 說明
${var} 等同于 $var
${var:-word} 如果 $var 的變量值為空或未賦值龙填,則返回 word 字符串,防止因變量是空值或未定義而導(dǎo)致異常。
${var:=word} 如果 $var 的變量值為空或未賦值岩遗,則設(shè)置這個(gè)變量值為 word扇商,并返回其值。位置變量和狀態(tài)變量等特殊變量不適用宿礁“钙蹋基本同上一個(gè),但該變量又額外給 $var 變量賦值了梆靖。
${var:?word} 如果 $var 的變量值為空或未賦值控汉,那么 word 字符串將被作為標(biāo)準(zhǔn)錯(cuò)誤輸出,否則輸出變量的值返吻。用于捕捉由于變量未定義而導(dǎo)致的錯(cuò)誤姑子,并退出程序。
${var:+word} 如果 $var 的變量值為空或未賦值测僵,則什么都不做街佑,否則返回 word 字符串的值,也就是整個(gè)表達(dá)式的值為 word 捍靠。

4.3沐旨、特殊變量

bash 中,還有兩種特殊的變量榨婆,分別為位置變量和狀態(tài)變量磁携。

位置變量也叫位置參數(shù),是 bash 腳本執(zhí)行時(shí)寫入命令行的參數(shù)或選項(xiàng)纲辽,會(huì)傳遞給腳本或函數(shù)颜武。位置變量為 $n,n 是一個(gè)非負(fù)的整數(shù)拖吼,表示第幾個(gè)參數(shù)。例如这吻,第一個(gè)參數(shù)是 $1吊档,第二個(gè)參數(shù)是 $2,在 n 大于等于 10 的時(shí)候唾糯,需要使用 ${n}

mcdx@ubuntu:~$ cat test.sh 
echo $1 $2
echo ${12} $12
mcdx@ubuntu:~$ source test.sh 1 2 3 4 5 6 7 8 9 0 a b c
1 2
b 12  # 這個(gè) 12 怎么來的呢怠硼?$12 相當(dāng)于 $1 加上 2 

狀態(tài)變量,見下表:

變量 含義
$0 當(dāng)前腳本的文件名
$# 傳遞給腳本或函數(shù)的參數(shù)數(shù)量
$* 傳遞給腳本或函數(shù)的所有參數(shù)
$? 獲取執(zhí)行上一個(gè)指令的執(zhí)行狀態(tài)返回值(0 為成功移怯,非零為失斚懔А),我們之前已經(jīng)用到了
$$ 獲取當(dāng)前執(zhí)行的 shell 腳本的進(jìn)程號(hào)(PID)
$! 獲取上一個(gè)在后臺(tái)工作的進(jìn)程的進(jìn)程號(hào)
$_ 獲取在此之前執(zhí)行的命令或腳本的最后一個(gè)參數(shù)

五舟误、刪除變量

mcdx@ubuntu:~$ echo $shiyanlou
2
mcdx@ubuntu:~$ unset shiyanlou
mcdx@ubuntu:~$ echo $shiyanlou

mcdx@ubuntu:~$ 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末葡秒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌眯牧,老刑警劉巖蹋岩,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異学少,居然都是意外死亡剪个,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門版确,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扣囊,“玉大人,你說我怎么就攤上這事绒疗∪缗” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵忌堂,是天一觀的道長(zhǎng)盒至。 經(jīng)常有香客問我,道長(zhǎng)士修,這世上最難降的妖魔是什么枷遂? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮棋嘲,結(jié)果婚禮上酒唉,老公的妹妹穿的比我還像新娘。我一直安慰自己沸移,他們只是感情好痪伦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雹锣,像睡著了一般网沾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蕊爵,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天辉哥,我揣著相機(jī)與錄音,去河邊找鬼攒射。 笑死醋旦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的会放。 我是一名探鬼主播饲齐,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼咧最!你這毒婦竟也來了捂人?” 一聲冷哼從身側(cè)響起御雕,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎先慷,沒想到半個(gè)月后饮笛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡论熙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年福青,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脓诡。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡无午,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祝谚,到底是詐尸還是另有隱情宪迟,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布交惯,位于F島的核電站次泽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏席爽。R本人自食惡果不足惜意荤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望只锻。 院中可真熱鬧玖像,春花似錦、人聲如沸齐饮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祖驱。三九已至握恳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間羹膳,已是汗流浹背睡互。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陵像,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓寇壳,卻偏偏與公主長(zhǎng)得像醒颖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子壳炎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345