上篇博客我們介紹了bash的一些基本功能,這是我們平時操作最頻繁的。本篇博客我們介紹bash的變量,為后面編寫shell腳本做鋪墊。
1、什么是變量
變量是計算機內存的單元,其中存放的值可以改變。
當 shell 腳本需要保存一些信息時,如一個文件名或者一個數字,就把它放在一個變量里。每個變量都有一個名字,可以根據名字來引用變量。
使用變量可以保存有用信息,使系統獲知用戶的相關設置,變量也可以保存暫時信息。
2、變量的聲明規則
3、變量的分類
4、用戶自定義變量的用法
用戶自定義變量也就是本地變量。只在當前 shell 中生效。
①、變量定義
變量名=變量值
②、變量調用
$變量名
③、變量查看
set
set 是查看當前系統中定義的所有變量。
④、變量刪除
unset 變量名
5、環境變量的用法
環境變量主要保存的是和系統操作環境相關的變量。
前面講的用戶自定義變量(本地變量)只在當前shell 中生效,而環境變量會在當前shell和這個shell的所有子shell當中生效,如果把環境變量寫入相應的配置文件中,那么這個環境變量就會在所有的shell中生效。
①、通過 pstree 命令區分當前shell 的級別是父還是子
②、聲明環境變量
export 變量名=變量值
③、查詢所有環境變量
env
前面講的 set 命令是查看所有變量,而 env 是查看環境變量。
④、查看、刪除指定環境變量
$變量名 #查看環境變量 unset 變量名 #刪除環境變量
這兩個和本地變量一樣。
⑤、系統查找命令的路徑環境變量 $PATH
我們知道調用命令必須要是在當前目錄,或者是用絕對路徑進行。但是實際上我們調用某個命令直接使用命令名就可以了,比如cd,ls等等這些常用的,這是為什么呢?
原因就是在 $PATH 里面我們已經定義好了,我們執行某個名稱的命令,系統會首先去$PATH里面查找,如果找不到才會報找不到命令錯誤。
首先看一下$PATH:
可以看到,$PATH 里面都是保存的一些路徑,然后通過:分隔。
前面我們寫過一個 hello.sh 的腳本,我們知道要想執行它,必須首先賦予可執行權限,然后要么在當前目錄通過./hello.sh來執行,要么通過絕對路徑/tmp/hello.sh來執行。如果我們想直接通過 hello.sh 來執行呢?
解決辦法就將hello.sh的所在路徑添加到 $PATH 變量中,如下:
⑥、定義系統提示符的變量 $PS1
6、位置參數變量的用法
7、預定義變量的用法
其實預定義變量也是位置參數變量的一種,有如下幾種用法:
8、聲明變量類型 declare
9、數值運算的三種方法
①、declare -i
②、expr 或 let 數值運算工具
③、$((運算式)) 或 $[運算式]
10、運算符及其優先級順序
11、變量測試與替換
12、環境變量配置文件
前面我們在將環境變量的時候,我們將腳本的路徑加入到 $PATH 路徑中,然后就可以直接通過腳本的名稱來執行腳本。但是如果系統重啟之后,發現又必須要重新加入到 $PATH 變量中才可以。那么有沒有讓它一直生效的方法呢?
解決辦法就是在環境變量配置文件中加入腳本的路徑。
環境變量配置文件中主要定義對系統的操作環境生效的系統默認環境變量,比如 PATH,HISTSIZE,PS1,HOSTNAME等默認環境變量。分別有以下配置文件:
下圖是環境變量文件的讀取順序:(用戶每次重新登錄的時候就會重新讀取下面的配置文件)
我們知道 $PATH 變量,用戶每次登錄,就會從上面的文件讀取順序讀取所有配置文件,最后得到 $PATH 變量的值。
注意:越往后面的配置文件,里面配置的變量內容優先級越高。