『忘了再學』Shell基礎 — 13、環境變數(一)

提示:

在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命令

image

(2)set命令

env命令可以查詢到所有的環境變數,但是還有一些變數是env命令查看不到的,這些變數雖然不是環境變數,卻是和Bash操作介面相關的變數,這些變數也對我們的Bash操作終端起到了重要的作用。這些變數就只能用set命令來查看了,只列出重要的內容,如下:

image

(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目錄下。如下圖:

image

但是我們直接執行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中。(可查看後續文章)