天天看點

《Linux指令行與shell腳本程式設計大全》 第六章環境變量

很多程式和腳本都通過環境變量來擷取系統資訊、存儲臨時資料和配置資訊。

6.1 什麼是環境變量:

bash shell用一個叫環境變量(environment variable)的特性來存儲有關shell會話和工作環境的資訊。

這項特性允許在記憶體中存儲資料,以便程式能輕松通路到它們。

在bash shell中,分兩類:

全局變量:對于shell會話和所有生成的子shell都是可見的

局部變量:隻對建立的它們的shell可見

6.1.1全局環境變量

檢視全局變量,  $env    $printenv

檢視某個全局變量:$printenv HOME  或者 

$echo $PATH   // $後面接變量名。能讓變量作為指令行參數

比如:ls  $HOME   相當于 ls  /home/xiaochongyong

6.1.2 局部環境變量

隻在定義它們的程序中可見。

可分為:标準的局部變量  和 使用者自定義的局部變量

set:顯示為某個特定程序設定的所有環境變量(包括全局,标準局部,自定義局部),還會按照字母排序。

6.2 設定自定義變量。大小寫敏感的

6.2.1 設定局部自定義變量:盡量用小寫

$my_variable=hello

$echo $ my_variable

$my_variable="hello xcy"   // 兩個詞時這麼寫,加"" 。=邊上還不能有空格

父shell中寫了,子shell不一定能用。反之也是。

6.2.1 設定全局環境變量。

設定全局變量的程序所建立的子程序中,該變量都是可見的。

建立方法:

(1)

$my_variable=hello  // 建立環境變量

$export my_variable  // 導出到全局變量中

(2)export $my_variable=new_hello   // 這樣是更改值

子shell無法改到父shell中全局變量的值。隻在目前子shell有效。

6.3删除環境變量

$unset my_variable

子shell中删除了,無法反應到父shell中去。

6.4 預設的shell環境變量。

預設情況下,bash shell中會用一些特定的環境變量來定義系統環境。

這些變量在Linux系統上都已經設定好了。

6.5 設定PATH環境變量

PATH:定義了用于進行指令和程式查找的目錄。

echo $PATH   目錄以冒号隔開。

可以把新的搜尋目錄添加到現有的PATH環境變量中。比如:

《Linux指令行與shell腳本程式設計大全》 第六章環境變量

gcc hello.c -o xcy

一般隻能 ./xcy   運作

但是加了環境變量之後就可以運作了。

但是切換到别的目錄還是不行。除非這麼加

《Linux指令行與shell腳本程式設計大全》 第六章環境變量
《Linux指令行與shell腳本程式設計大全》 第六章環境變量

對PATH的修改隻能持續到退出或重新開機系統,不能一直持續。

6.6 定位系統環境變量

登入系統啟動一個bash shell時,預設情況下bash會在幾個檔案中查找指令。這種檔案叫做啟動檔案或環境檔案。

bash檢查的啟動檔案取決于啟動bash shell 的方式。啟動方式有三種:

1.登入shell:登入系統時,bash shell會作為登入shell啟動。會從5個啟動檔案裡面讀取指令。

(1)/etc/profile  (系統預設主啟動檔案,系統上每個使用者登入都會執行這個啟動檔案)

(2)HOME/.bash_profile  HOME/.bashrc  HOME/.bash_login  HOME/.profile

這4個是針對使用者的,提供一個使用者專屬的啟動檔案來定義該使用者所用到的環境變量。

大多數Linux發行版隻用到這四個檔案中的一兩個。不一定每個使用者都有所有檔案。

shell、按照下面的順序運作第一個被找到的檔案,餘下的被忽略:

HOME/.bash_profile 

HOME/.bash_login 

HOME/.profile

注意上面沒有HOME/.bashrc  。

HOME/.bashrc  這個檔案通常通過其他檔案運作。

我的電腦裡面隻有 HOME/.profile

紅色部分表示檢查HOME目錄是不是有一個.bashrc,如果有就會先執行.bashrc裡面的指令

《Linux指令行與shell腳本程式設計大全》 第六章環境變量

2.互動式shell程序

不是系統登入時啟動的,比如在終端下直接運作bash。這個就是互動式shell程序。

這種程序不會通路/etc/profile,隻會檢查HOME下的.bashrc

.bashrc有兩個作用:1.檢視/etc目錄下通用的bashrc檔案、2.為使用者提供一個定制自己指令别名和私有腳本函數的地方

3.非互動式shell

系統執行shell腳本時用的就是這種shell。

沒有指令行提示符。

bash shell提供BASH_ENV環境變量。當啟動非互動式shell時,會檢查BASH_ENV來檢視要執行的啟動檔案。如果有,shell會執行裡面的指令。這通常包含shell腳本變量設定。

我的電腦沒有BASH_ENV值。是如何處理的呢?通過繼承父shell的導出過的變量。

比如:父shell是登入shell。在/etc/profile  /etc/profile.d/*.sh  HOME/.bashrc  檔案中設定并導出了環境變量,用于執行腳本的子shell能繼承這些變量。、

父shell未導出的變量是局部變量,子shell無法繼承。

6.6.4 環境變量持久化

對于全局環境變量,/etc/profile 在更新之後就會沒有。可以在/etc/profile.d 目錄下建立一個.sh結尾的檔案,把所有新的或修改過的全局變量放在這個檔案中

存儲個人永久性bash shell的地方是HOME/.bashrc。

比如之前的給指令取别名,如果放在這裡就可以永遠使用了。

6.7 數組變量。

環境變量可以是數組(從0開始)。比如:

《Linux指令行與shell腳本程式設計大全》 第六章環境變量

這個用的很少。

繼續閱讀