『忘了再學』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中。(可查看後續文章)