1. 程式人生 > >Linux真小白入門教程第十集——環境變數

Linux真小白入門教程第十集——環境變數

對於Linux來說,很多程式和指令碼都要通過環境變數來獲取系統的資訊儲存臨時資料配置資訊

bash shell有一個叫做環境變數的特性來儲存有關shell會話和工作環境的資訊,它允許你在記憶體中儲存資料,以便shell指令碼能夠訪問到他們,這也是持久儲存資料的簡便方法。

bash shell 中環境變數分兩類:全域性環境變數和區域性環境變數(不同Linux發行版本上,其專有的環境變數有可能會不一致)

 

全域性環境變數對於shell會話和所有生成的子shell都是可見的,而區域性環境變數則只對建立它的shell可見。這使得全域性環境變數對那些所建立的子shell 想要獲取到父shell資訊的程式來說,非常有用。

Linux系統在開始bash回話時,就設定了一些全域性環境變數(基本上全部使用大寫字母,以區別普通使用者的環境變數)

env或printenv命令可以檢視全域性變數

(登入方式也會影響到所設定的環境變數)

 

但是如果要顯示個別環境變數的值,只能使用printenv

或者也可以使用echo,這是需要在變數前面加美元符號$

加上$符號,不僅僅是要顯示變數當前的值,他能夠讓變數作為命令列引數

比如:

 

區域性環境變數:

只能在定義他們的程序中可見,Linux系統也預設定義了標準的區域性環境變數。

set命令

可以顯示為某個特定程序設定的所有環境變數(包括全域性和區域性以及使用者自定義變數)(Linux沒有隻顯示區域性環境變數的命令)

注意大小寫區分全域性和區域性變數哦~

 

set、printenv、env命令之間的差異很細微,set會顯示出所有區域性、全域性以及自定義變數,而且是按照字母順序進行排序。而env和printenv命令是不會排序的,也不會輸出區域性和自定義變數。

 

 

設定使用者自定義變數

可以在bash shell中直接設定自己的變數,啟動bash shell後(或者執行了一個shell指令碼),就能建立在這個shell 程序內可見的區域性變量了。使用echo命令

通過等號給環境變數賦值,值可以是數值或是字串

如果是帶有空格的字串,那麼必須用雙引號來界定字串的頭尾

沒有單引號的話,bash shell會以為下一個詞是另一個要執行的命令

(所有的系統的環境變數名均使用大寫字母,這是bash shell的標準慣例。所以建立使用者變數或者shell指令碼時,請使用小寫字母以區分開來

記住:子shell本身的環境變數在它自己的子shell中不可見,退回上一層shell後,才可使用。(沒有繼承關係,完全私有

 

如果一個程序設定了一個全域性環境變數,那麼其建立的子程序,是對其子程序可見的建立全域性環境變數的方法是先建立一個區域性環境變數,然後再把它匯出到全域性環境中

export命令可以完成這項任務 ,明顯在子shell中可以正確顯示my_variable變數。

 

然而修改子shell 中全域性環境變數並不會影響到父shell中該變數的值

如上所示,改變僅在子shell中生效。

 

子shell甚至無法使用export 命令改變父shell中全域性環境變數的值(依然不變)。

 

使用unset命令可以刪除已存在的環境變數

unset my_variable

使用$是要用到變數

不帶$是要操作變數),記住區別(printenv是一個例外)。

在處理全域性環境變數時,僅在子shell中刪除,其仍然在父shell中生效。

 

一些預設的shell環境變數

預設情況下,bash shell會用一些特定的環境變數來定義系統環境,下面是一小部分例子。

記住並不是每個預設的環境變數都對應有值,也可能為空

 

設定PATH環境變數

當在shell命令列介面輸入一個外部命令時,shell必須搜尋系統來找到對應的程式,PATH環境變數定義了用於進行命令和程式查詢的目錄。

和Windows的PATH基本一致,只是Linux使用:冒號進行分隔Windows使用;分號進行分隔。

將可執行程式的目錄放入PATH,即可執行或者使用。

通常使用的方法:

PATH = $PATH:.

使用單點符,將當前目錄加入到PATH環境變數,並且這個修改只能持續到shell退出或者系統重啟。

那麼如何持久化環境變數呢~不同的shell啟動方式,對應在系統不同的啟動檔案中,將環境變數加入到對應的啟動檔案(修改)之後,才能完成持久化的修改。(但是更新Linux版本後,所有檔案都會跟著更新,定製的設定就不會再存在最好是在/etc/profile.d檔案中建立一個以.sh結尾的檔案,把所有的新的或者修改過得全域性環境變數都設定在這個檔案中

在大多數發行版中,儲存個人使用者永久性bash shell變數的地方是$HOME/.bashrc檔案。這一點適用於所有型別的shell程序。

 

環境變數還有一個特點就是可以作為陣列使用,可以儲存多個值的變數,可以單獨引用還可以作為一個數組來使用。

要給某個環境變數設定多個值,把值放在括號中,值與值之間用空格分隔。

my_variable = (a,b,tow,God)

要引用一個單獨的陣列元素,就必須用代表它在陣列中位置的數值作為索引值。

echo ${my_variable[2]}

記得索引值從0開始

要顯示整個陣列,則使用*號

echo ${my_variable[*]}

也可對陣列中的值進行修改

my_variable[2] = today

使用unset刪除某個值時,只能對值進行刪除,位置上為空。

unset my_variable

即可刪除整個陣列

(陣列不經常用到,因為一方面比較麻煩,一方面移植性也不好)