上篇博客咱們介紹了bash的一些基本功能,這是咱們平時操做最頻繁的。本篇博客咱們介紹bash的變量,爲後面編寫shell腳本作鋪墊。java
變量是計算機內存的單元,其中存放的值能夠改變。shell
當 shell 腳本須要保存一些信息時,如一個文件名或者一個數字,就把它放在一個變量裏。每一個變量都有一個名字,能夠根據名字來引用變量。bash
使用變量能夠保存有用信息,使系統獲知用戶的相關設置,變量也能夠保存暫時信息。工具
用戶自定義變量也就是本地變量。只在當前 shell 中生效。測試
變量名=變量值
$變量名
set
set 是查看當前系統中定義的全部變量。3d
unset 變量名
環境變量主要保存的是和系統操做環境相關的變量。blog
前面講的用戶自定義變量(本地變量)只在當前shell 中生效,而環境變量會在當前shell和這個shell的全部子shell當中生效,若是把環境變量寫入相應的配置文件中,那麼這個環境變量就會在全部的shell中生效。內存
export 變量名=變量值
env
前面講的 set 命令是查看全部變量,而 env 是查看環境變量。博客
$變量名 #查看環境變量 unset 變量名 #刪除環境變量
這兩個和本地變量同樣。class
咱們知道調用命令必需要是在當前目錄,或者是用絕對路徑進行。可是實際上咱們調用某個命令直接使用命令名就能夠了,好比cd,ls等等這些經常使用的,這是爲何呢?
緣由就是在 $PATH 裏面咱們已經定義好了,咱們執行某個名稱的命令,系統會首先去$PATH裏面查找,若是找不到纔會報找不到命令錯誤。
首先看一下$PATH:
能夠看到,$PATH 裏面都是保存的一些路徑,而後經過:分隔。
前面咱們寫過一個 hello.sh 的腳本,咱們知道要想執行它,必須首先賦予可執行權限,而後要麼在當前目錄經過./hello.sh來執行,要麼經過絕對路徑/tmp/hello.sh來執行。若是咱們想直接經過 hello.sh 來執行呢?
解決辦法就將hello.sh的所在路徑添加到 $PATH 變量中,以下:
其實預約義變量也是位置參數變量的一種,有以下幾種用法:
前面咱們在將環境變量的時候,咱們將腳本的路徑加入到 $PATH 路徑中,而後就能夠直接經過腳本的名稱來執行腳本。可是若是系統重啓以後,發現又必需要從新加入到 $PATH 變量中才能夠。那麼有沒有讓它一直生效的方法呢?
解決辦法就是在環境變量配置文件中加入腳本的路徑。
環境變量配置文件中主要定義對系統的操做環境生效的系統默認環境變量,好比 PATH,HISTSIZE,PS1,HOSTNAME等默認環境變量。分別有如下配置文件:
下圖是環境變量文件的讀取順序:(用戶每次從新登陸的時候就會從新讀取下面的配置文件)
咱們知道 $PATH 變量,用戶每次登陸,就會從上面的文件讀取順序讀取全部配置文件,最後獲得 $PATH 變量的值。
注意:越日後面的配置文件,裏面配置的變量內容優先級越高。