1. 程式人生 > >Linux系列教程(二十二)——Linux的bash變量

Linux系列教程(二十二)——Linux的bash變量

自定義變量 bash 可執行 pre 技術 文件名 使用 什麽是 環境變量

  上篇博客我們介紹了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 變量的值。

  註意:越往後面的配置文件,裏面配置的變量內容優先級越高。

  技術分享圖片

  技術分享圖片

  技術分享圖片

  技術分享圖片

    

    

Linux系列教程(二十二)——Linux的bash變量