提示:
在Shell中,環境變數分為兩種。一種是使用者自定義的環境變數,另一種是系統自帶的環境變數。
而在系統自帶的環境變數中,PATH環境變數、PS1環境變數、LANG語系變數需要進行說明一下。
本篇文章主要說明使用者自定義的環境變數,和PATH環境變數。
1、使用者自定義的環境變數
(1)環境變數設定
使用export
關鍵字宣告的變數就是環境變數。
格式:
[root@localhost ~]# export AGE="18"
也可以先定義一個自定義變數,然後把自定義變數宣告稱環境變數。如下:
[root@localhost ~]# AGE=18
[root@localhost ~]# export AGE
注:
環境變數名稱一般要用大寫。
環境變數的作用域,在父子Shell中都可檢視。
(2)查詢自定義環境變數
env
命令和set
命令的區別是,set命令可以檢視所有變數,而env
命令只能檢視環境變數。(具體看上一篇文章)
這裡說明一下env
命令和set
命令所檢視的一些重要的內容,以後就不詳細說明了。
(1)env
命令
(2)set
命令
env
命令可以查詢到所有的環境變數,但是還有一些變數是env
命令檢視不到的,這些變數雖然不是環境變數,卻是和Bash操作介面相關的變數,這些變數也對我們的Bash操作終端起到了重要的作用。這些變數就只能用set
命令來檢視了,只列出重要的內容,如下:
(3)刪除自定義環境變數
和使用者定義變數一樣,用unset
命令刪除變數。
#刪除環境變數 gender
[root@localhost ~]# unset gender
2、系統自帶的環境變數——PATH環境變數
系統自帶的環境變數的名稱和作用都不能夠改變。
系統的環境變數,用上邊介紹的env
命令和set
命令都可以查出。我們接下來說明幾個比較重點的環境變數。
(1)PATH環境變數
檢視當前系統PATH環境變數的值:
[root@localhost ~ ] # echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
每次執行env
命令和set
命令都要在好多變數中找我們需要檢視的變數很麻煩,可以使用上面的方式直接檢視我們所需的變數的值。
(2)PATH環境變數的作用
PATH變數的作用:系統查詢命令的路徑。
你回想一下,在說明Shell執行指令碼執行的時候說過,有兩種方法可以執行Shell指令碼,一個是通過絕對路徑或者相對路徑執行指令碼,如:/root/hello.sh
或者./hello.sh
。還有一種方法是直接執行bash命令執行指令碼,如:bash hello.sh
。我們當時建議用第一種方式。(在Linux系統中,所有的執行檔案,都應該使用絕對路徑來執行它)
但是我們有沒有發現,比如我們之前所執行過的一些系統命令,如ls
命令,我們知道ls
命令在系統的bin目錄下。如下圖:
但是我們直接執行ls
命令,並沒有使用絕對路徑,系統就能夠執行ls
命令,這是為什麼呢?
根本原因就是在這個PATH環境變數中。
PATH環境變數中配置的這些路徑,就是系統查詢命令的路徑。也就是說當我們輸入了一個程式名,如果沒有寫命令的路徑,系統就會到PATH環境變數定義的路徑中去尋找,是否有可以執行的程式。從左到右一個一個目錄查詢你所要執行的命令,找到了就直接執行,而如果把所有的目錄都搜尋完了,也沒有找到你所執行的命令,就會報錯,提示你-bash:變數名:command not found(命令沒找到)
。換句話說也就是你這個命令執行的不正確,也或者說你所執行的命令,並沒有配置在PATH環境變數中。
注意:PATH環境變數的值中,是用“:”分割的路徑。
(3)配置命令的環境變數
我們如何才能讓一個自定義的程式或者指令碼,不用輸入絕對路徑就能夠執行呢?
有兩種方式:
- 第一種方式:直接把程式或者指令碼的可執行檔案,直接複製到PATH環境變數下的任一個目錄下即可。
#拷貝hello.sh檔案到bin目錄下 [root@localhost ~]# cp /root/sh/hello.sh /bin/ #hello.sh指令碼即可以直接執行 [root@localhost ~]# hello.sh Perhaps only heart no holdings, to being on land, settle. 也許只有心無所持,才能隨遇而安。
- 第二種方式:把程式或者指令碼所有在的路徑,新增到PATH環境變數中即可。
通過變數的疊加就可以實現:#在變數PATH的後面,加入/root/sh目錄 [root@localhost ~]# PATH="$PATH":/root/sh #查詢PATH的值,變數疊加生效了 [root@localhost ~]# echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/sh
注意的是,我們這樣定義的PATH環境變數只是臨時生效,一旦重啟或登出就會消失,如果想要永久生效,需要寫入環境變數配置檔案
/etc/profile
中。(可檢視後續文章)