1. 程式人生 > >《Linux命令行與shell腳本編程大全》 第六章環境變量

《Linux命令行與shell腳本編程大全》 第六章環境變量

表示 com export 命令行 命令行參數 logs 登錄系統 就是 如何

很多程序和腳本都通過環境變量來獲取系統信息、存儲臨時數據和配置信息。

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

技術分享

這個用的很少。

《Linux命令行與shell腳本編程大全》 第六章環境變量