《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"   // 兩個詞時這么寫,加"" 。=邊上還不能有空格

$echo $ my_variable

父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環境變量中。比如:

 

gcc hello.c -o xcy

一般只能 ./xcy   運行

但是加了環境變量之后就可以運行了。

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

 

 

對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里面的命令

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開始)。比如:

 

這個用的很少。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM