1. 程式人生 > >Linux 變量的使用

Linux 變量的使用

否支持 mman 分享 不執行 big bash 所在 info 同時

目錄

  • 1. Shell 腳本規範
  • 2. Shell 腳本執行
  • 3. Shell 腳本變量
    • 3.1 環境變量
      • 3.1.1 自定義環境變量
      • 3.1.2 顯示與取消環境變量
      • 3.1.3 環境變量初始化與對應文件的生效順序
    • 3.2 普通變量
      • 3.2.1 定義本地變量
      • 3.2.2 shell 調用變量
      • 3.2.3 grep 調用變量
      • 3.2.4 awk 調用變量
    • 3.3 特殊變量
    • 3.4 變量子串
  • 4. Shell 運算符
  • x.-系統變量列表

1. Shell 腳本規範

一個規範的 Shell 腳本在第一行會指出由哪個程序(解釋器)來執行腳本中的內容,這一行內容在 Linux bash 的編程一般為:

#! /bin/bash
# 或者, 不過註意,要在255個字符以內!
#! /bin/sh    

在執行bash腳本的時候,內核會根據“#!”後的解釋器來確定該用哪個程序解釋這個腳本中的內容,不過註意。這一行必須位於每個腳本頂端的第一行

,如果不是第一行則為腳本的註釋行。

類似這種的有很多,例如:

  1. #! /bin/sh
  2. #! /bin/bash
  3. #! /usr/bin/awk
  4. #! /bin/sed
  5. #! /usr/bin/tcl
  6. #! /usr/bin/expect
  7. #! /usr/bin/perl
  8. #! /usr/bin/env python

如果在腳本開頭的第一行不指定解釋器,那麽就要用對應的解釋器來執行腳本,這樣才能確保腳本正確執行,例如:

如果是 Shell 腳本,就用bash test.sh 執行

如果是Python 腳本,就用 python test.py 執行

如果是expect 腳本,就用 expect test.py 執行






2. Shell 腳本執行

當 Shell 腳本運行時,它會先查找系統環境變量 ENV,該變量指定了環境文件(加載順序通常是 /etc/profile~/.bash_profile~/.bashrc/etc/bashrc等),在加載了上述環境變量文件後,Shell 就開始執行 Shell 腳本中的內容。

Shell 腳本是從上到下,從左至右依次執行每一行的命令及語句的,既執行完了一個命令後在執行下一個,如果在 Shell 腳本中遇到子腳本(即腳本嵌套)時,就會先執行子腳本的內容,完成後再返回父腳本繼續執行父腳本內後續的命令及語句,

通常情況下,在執行 Shell 腳本時,會向系統內核請求啟動一個新的進程,以便在該進程中執行腳本的命令及子Shell腳本,基本流程如下圖所示。
技術分享圖片

設置 Linux 的 crond 任務時,最好能在定時任務腳本中重新定義系統環境變量,否則,一些系統環境變量將不會被加載,這個問題需要註意!






3. Shell 腳本變量

存放一個值的空間即為變量,

默認情況下,在 bash shell 中是不會區分變量類型的,例如:常見的變量類型為數字、字符串、小數等,這和其他強類型語言(例如:Java/C語言)是有區別的,當然,如果需要指定Shell變量的類型,也可以使用 declare 顯示定義變量的類型,但在一般情況下沒有這個需求,Shell 開發者在開發腳本時需要自行註意 Shell 腳本中變量的類型。

變量可分為兩類:環境變量(全局變量)和普通變量(局部變量)

環境變量也可稱為全局變量,可以在創建它們的Shell 及其派生出來的任意子進程 Shell 中使用,環境變量又可分為自定義環境變量和 bash 內置的環境變量。

普通變量也可稱為局部變量,只能在創建它們的Shell函數或Shell腳本中使用,普通變量一般由開發者在開發腳本程序時創建。






3.1 環境變量

環境變量一般是指用 expirt 內置命令導出的變量,用於定義 Shell 的運行環境,保證 Shell 命令的正確執行,Shell 通過環境變量來確定登錄用戶名命令路徑終端類型登錄目錄等,所有的環境變量都是系統全局變量,可用於所有子進程中,這包括編輯器、Shell 腳本和各類應用。


環境變量可以在命令行中設置和創建,但用戶退出命令時這些變量值就會丟失,因此,如果希望永久保存環境變量,可在用戶家目錄下的.bash_profile.bashrc(非用戶登錄模式特有,例如遠程 SSH)文件中,或者全局配置/etc/bashrc(非用戶登錄模式特有,例如遠程 SSH)或 /etc/profile 文件中定義,在將環境變量放入上述的文件中後,每次用戶登錄時這些變量都將被初始化。


按照系統規範,所有環境變量的名字均采用大寫形式,在將環境變量應用於用戶進程程序之前,都應該用 expirt 命令導出定義,例如:正確的環境變量定義方法為 exprot OLDGIRL=1


有一些環境變量,比如 HOME、PATH、SHELL、UID、USER 等,在用戶登錄之前就已經被 /bin/login 程序設置好了,通常環境變量被定義保存在用戶家目錄下的.bash_profile 文件或全局的配置文件/etc/profile中。


在查看設置的變量時,有3個命令可以顯示變量的值:set、env 和 declare(替代早期 typeset)set 命令輸出所有的變量,包括全局變量和局部變量,env 命令只顯示全局變量,declare 命令輸出所有的變量、函數、整數和已經導出的變量,set -o 命令顯示 bash Shell 的所有參數配置信息


系統變量表見系統環境變量表






3.1.1 自定義環境變量


(1)設置環境變量

如果想要設置環境變量,就要在給變量賦值之後或在設置變量時使用 export 命令,另外,除了 export 命令。帶 -x 選項的 declare 內置命令也可以完成同樣的功能(註意:此處不要再前面加 $)

export 命令和 declare 命令的格式如下:

export 變量名=value
變量名=value ; export 變量名
declare -x 變量名=value

例如:

[root@www ~]$ export NAME=oldboy
[root@www ~]$ NAME=oldboy ; export NAME
[root@www ~]$ declare -x NAME=oldboy



(2)設置環境變量(永久生效)


用戶的環境變量配置:

[root@www ~]$ ls /root/.bashrc          # 推薦再此文件中優先設置
/root/.bashrc
[root@www ~]$ ls /root/.bash_profile
/root/.bash_profile

全局的環境變量配置

[root@www ~]$ /etc/profile
[root@www ~]$ /etc/bashrc
[root@www ~]$ /etc/profile.d/

若要在登陸後初始化或顯示加載內容,則把腳本文件放在 /etc/profile.d/ 下即可(無需加載執行權限)



(3)設置登錄提示的兩種方式


第一種是在/etc/motd裏增加提示的字符串,如下:

[root@www ~]$ cat /etc/motd
welcome to Linux.

第二種是在/etc/profile.d/下面增加如下腳本:

[root@www ~]$ cat /etc/profile.d/login_info.sh
echo "welcome to Linux."

以下是在生產場景下(在Java環境中),自定義環境變量的示例。

export JAVA_HOME=/application/jdk
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export RESIN=/applaction/resin

提示

上述的環境變量設置通常放在/etc/profile全局環境變量裏,

如果是寫Java的腳本,那麽最好是把上述 Java 環境配置放入腳本內重新定義,特別是作為定時任務執行的腳本。






3.1.2 顯示與取消環境變量


(1)通過 echo 或 printf 打印環境變量

[root@www ~]$ echo $HOME
/root
[root@www ~]$ echo $UID
0
[root@www ~]$ echo $PWD
/root
[root@www ~]$ echo $SHELL
/bin/bash
[root@www ~]$ echo $USER
root
[root@www ~]$ printf "$HOME\n"
/root

提示

在寫Shell 腳本時可以直接使用系統默認的環境變量,一般情況下是不需要重新定義的,在使用定時任務等執行 Shell 腳本時建議在腳本中重新定義。



(2)用 env 或 set 顯示默認的環境變量

[root@www ~]$ env
XDG_SESSION_ID=17
HOSTNAME=www.oliven.com
TERM=xterm
...
[root@www ~]$ set
BASH=/bin/bash
...
[root@www ~]$ declare | head 
BASH=/bin/bash
...



(3)用 unset 消除本地變量和環境變量

[root@www ~]$ echo $USER
root
[root@www ~]$ unset USER
[root@www ~]$ echo $USER

[root@www ~]$






3.1.3 環境變量初始化與對應文件的生效順序

在登錄Linux系統並啟動一個 bash shell 時,默認情況下 bash 會在若幹個文件中查找環境變量的設置,這些文件可統稱為系統環境文件,bash 檢查的環境變量文件的情況取決於系統運行 Shell 的方式,系統運行 Shell 的方式有 3 種。

(1)通過系統用戶登錄後默認運行的 Shell

(2)非登錄交互式運行 Shell

(3)執行腳本運行非交互是 Shell

技術分享圖片

當用戶登錄 Linux 系統時,Shell 會作為登錄 Shell 啟動,此時的登錄 Shell 加載環境變量的順序如上圖。


用戶登錄系統後首先會加載 /etc/profile 全局環境變量文件,這是 Linux 系統上默認的 Shell 主環境變量文件,系統上每個用戶登錄都會加載這個文件。


當加載完 /etc/profile 文件後,才會執行 /etc/profile.d/目錄下的腳本文件,這個目錄下的腳本文件由很多,例如:系統的字符集設置(/etc/sysconfig/i18n)等,以便用戶登錄後即可運行腳本


之後開始運行 $HOME/.bash_profile(用戶環境變量文件),在這個文件中,又會去找 $HOME/.bashrc(用戶環境變量文件),如果有,則執行,如果沒有,則不執行,在$HOME/.bashrc文件中又會去找/etc/bashrc(全局環境變量文件),如果有,則執行,如果沒有,則不執行。


如果用戶的Shell 不是登錄時啟動的(比如手動敲下 bash 時啟動或者其他不需要輸入密碼的登錄及遠程 SSH 連接情況)那麽這種非登錄 Shell 只會加載 $HOME/.bashrc(用戶環境變量文件),並會去找 /etc/bashrc(全局環境變量文件),因此如果希望在非登錄 Shell 下也可讀到設置的環境變量等內容,就需要將變量設定寫入 $HOME/.bashrc 或者 /etc/bashrc,而不是 $HOME/.bash_profile/etc/profile






3.2 普通變量


3.2.1 定義本地變量

變量的賦值,一般有五種寫法:

name=value
name1=‘value‘
name_2="value"
_name_3=`cmd`
_na_me_4=$(cmd)

變量名一般是由字母、數字、下劃線組成的,可以以字母或下劃線開頭,


符號 作用
無引號,
單引號,輸出時,將單引號內的所有內容都原樣輸出,這稱為強引用
" 雙引號,輸出雙引號內的所有內容,如果內容中有變量,特殊轉義符等,會先把變量,轉移符等解析出結果,然後再輸出最終內容,這成為強引用
` 反引號,一般用於引用命令,執行的時候命令會被執行,與$()作用相同,
$() 與`作用相同






3.2.2 shell 調用變量

要想調用變量,方法是:

[root@www ~]$ echo $name
[root@www ~]$ printf $name






3.2.3 grep 調用變量

[root@www ~]$ cat grep.log
oliven
china
[root@www ~]$ echo $name
oliven

[root@www ~]$ grep $name grep.log 
oliven
[root@www ~]$ grep ‘$name‘ grep.log 
[root@www ~]$ grep "$name" grep.log 
oliven

由此得出:

符號 意義
grep 無引號 調用的變量(不推薦)
grep 單引號 使用的是自身,‘$name‘,是使用的是$name這個5字符串進行匹配而不是,變量
grep 雙引號 調用的變量(推薦使用)






3.2.4 awk 調用變量

[root@www ~]$ x=some
[root@www ~]$ awk ‘BEGIN {print $x}‘

[root@www ~]$ awk ‘BEGIN {print ‘$x‘}‘

[root@www ~]$ awk ‘BEGIN {print "$x"}‘
$x
[root@www ~]$ awk ‘BEGIN {print "‘$x‘"}‘
some
awk x=some x=‘some‘ x="some" x=`cmd`
awk 加雙引號 本身 本身 本身 本身
awk 不加引號
awk 加單引號 正確輸出 報語法錯
awk 加單引號後在同時加雙引號 正確輸出 正確輸出 正確輸出 正確輸出






3.3 特殊變量

在 Shell 中存在一些特殊且重要的變量,例如:$0、$1、$#,我們稱之為特殊位置參數變量。要從命令行、函數或腳本執行等處傳遞參數時,就需要在 Shell 腳本中使用位置參數變量。下表為常用特殊位置參數變量的說明。

位置變量 作用說明
$0 獲取當前執行的 Shell 腳本的文件名,如果包含路徑,那麽就包括路徑
$n 獲取當前執行的 Shell 腳本的第 n 個參數值,如果 n 大於9,則用大括號括起來,例如${10},與空格分隔
$# 獲取當前執行的 Shell 腳本後面接的參數的總個數
$* 獲取當前 Shell 腳本所傳參的參數,不加引號和 $@ 相同,如果加上雙引號,例如:"$*",則表示將所有的參數視為單個字符串,相當於"$1 $2 $3"
$@ 獲取當前 Shell 腳本所有傳參的參數,不加引號和 $* 相同,如果加上雙引號,例如:"$@",則表示將所有的參數視為不同的獨立字符串,相當於"$1" "$2" "$3" "...",這是將多參數傳遞給其他程序的最佳方式,因為他會保留所有的內嵌在每個參數裏的任何空白,當"$@"和"$*"都加上 雙引號時,兩者時有區別的,都不加雙引號時,兩者無區別
$? 獲取執行上一個指令的執行狀態返回值(0未成功,非零為失敗),這個
$$ 獲取當前執行的 Shell 腳本的進程號(PID),這個變量不常用,了解即可
$! 獲取上一個在後臺工作的進程的進程號(PID),這個變量不常用,了解即可
$_ 獲取再次之前執行的命令或腳本的最後一個參數,這個變量不常用,了解即可






3.4 變量子串

Shell 變量子串的常用操作見下表,也可以在執行 man bash 命令之後,搜索Parameter Expansion 找到相應的幫助。

ID 表達式 說明
1 ${parameter} 返回變量parameter的內容
2 ${#parameter} 返回變量parameter內容的長度
3 ${parameter:offset} 在變量parameter中,從offset之後開始提取子串到結尾
4 ${parameter:offset:length} 在變量parameter中,從位置offset 之後開始提取長度為length的子串
5 ${parameter#word} 從變量parameter開頭開始刪除最短匹配的 word 子串
6 ${parameter##word} 從變量parameter開頭開始刪除最長匹配的 word 子串
7 ${parameter%word} 從變量parameter結尾開始刪除最短匹配的 word 子串
8 ${parameter%%word} 從變量parameter結尾開始刪除最長匹配的 word 子串
9 ${parameter/pattern/string} 使用 string 代替第一個匹配的 pattern
10 ${parameter//pattern/string} 使用 string 替換所有匹配的 pattern
11 ${parameter:-word} 如果 parameter 的變量值為空或未賦值,則會返回 word 字符串並替代變量的值,用途:如果變量未定義,則返回備用的值,防止變量為空值或因未定義而導致異常
12 ${parameter:=word} 如果 parameter 的變量值為空或未賦值,則設置這個變量值為 word,並返回其值,位置變量和特殊變量不適用
13 ${parameter:?word} 如果 parameter 變量值為空或未賦值,那麽 word 字符串將被作為標準錯誤輸出,否則輸出變量的值
14 ${parameter:+word} 如果 paraneter 變量值為空或未賦值,則什麽都不做,否則 word 字符串將替代變量的值






4. Shell 運算符

如果要執行算術運算,就會離不開各種運算符號,和其他編程語言類似,Shell 也有很多算術運算符,如下表所示:

算術運算符 意義
+、- 加發、減法
*、/、% 乘法、除法、取余
** 冪運算
++、-- 增加、減少
!、&&、|| 邏輯非、邏輯與、邏輯或
<、<=、>、>= 小於、小於大雨、大於、大於等於
==、!=、= 相等、不相等、對於字符串"="也可以表示相當於
<<、>> 向左移位、向右移位
~、|、&、^ 按位取反、按位異或、按位與、按位或
=、+=、-=、*=、/=、%= 賦值運算符例如,a+=1相當於a=a+1,
a-=1 相當於a=a-1*
運算命令 意義
(()) 用於整數運算的常用運算符,效率很高
let 用於整數運算,類似於(())
expr 可用於整數運算,但還有很多其他的額外功能
bc Linux 下的一個計算器程序(適合整數及小數運算)
$[] 用於整數運算
awk awk 既可用於整數運算,也可以用於小數運算
declare 定義變量值和屬性,-i 參數可以用於定義整形變量,做運算
() 括號中的命令將會新開一個子shell順序執行,所以括號內的變量不能被余下的部分使用,多個命令由分號;分隔
$() 執行該命令,與`相同,
((n#y)) 進制轉換,例如$((2#10100101))、$((16#5f))
((a++)) 整數重新賦值並自動增長,((a++))同等於let a++
{} 不創建子shell執行命令,例如{ echo "Hello Linux."; }
測試表達式符號 [] test [[]] (())
便捷是否需要空格 需要 需要 需要 需要
邏輯操作符 !、-a、-o !、-a、-o !、&&、|| !、&&、||
整數比較操作符 -eq、-gt、-lt、-ge、-le -eq、-gt、-lt、-ge、-le -eq、-gt、-lt、-ge、-le 或者 =、>、<、>=、<= =、>、<、>=、<=
字符串比較操作符 =、==、!= =、==、!= =、==、!= =、==、!=
是否支持通配符匹配 不支持 不支持 支持 不支持






x.-系統變量列表

CDPATH          # 冒號分割的目錄列表,最為cd命令的搜索路徑
HOME            # 當前用戶的主目錄
IFS             # shell用來將文本字符串分割成字段的一系列字符
MAIL            # 當前用戶手機哪像的文件名(bash shell會檢查這個文件,看看有沒有新郵件)
MAILPATH        # 冒號分割的當前用戶收件箱的文件名列表(bash shell會檢查這個文件,看有沒有新郵件)
OPTARG          # getopts命令處理的最後一個選項參數值
OPTIND          # getopts命令處理的最後一個選項參數的索引號
PATH            # shell查找命令的目錄列表,由冒號分隔
PS1             # shell命令行界面的主提示符
PS2             # shell命令行界面的次提示符
BASH            # 當前shell實例的全路徑名
BASH_ALIASES    # 含有當前已設置別名的關聯數組
BASH_ARGC       # 含有傳入子函數或shell腳本的參數總數的數組變量
BASH_ARCV       # 含有傳入子函數或shell腳本的參數的數組變量
BASH_CMDS       # 關聯數組,包含shell執行過的命令的所在位置
BASH_COMMAND    # shell正在執行的命令或馬上就執行的命令
BASH_ENV        # 設置了的話,沒個bash腳本會在運行前先嘗試運行該變量定義的啟動文件
BASH_EXECUTION_STRING   # 使用bash -c選項傳遞過來的命令
BASH_LINENO     # 含有當前執行的shell函數的源代碼行號的數組變量
BASH_REMATCH    # 只讀數組,在使用正則表達式的比較運算符=~進行肯定匹配(positive match)時,包                  含了匹配到的模式和子模式
BASH_SOURCE     # 含有當前正在執行的shell函數所在源文件名的數組變量
BASH_SUBSHELL   # 當前子shell環境的嵌套級別(初始值是0)
BASH_VERSINFO   # 含有當前運行的bash shell的主版本號和次版本號的數組變量
BASH_VERSION    # 當前運行的bash shell的版本號
BASH_XTRACEFD   # 若設置成了有效的文件描述符(0,1,2),則‘set -x‘調試選項生成的跟蹤輸出可被重定向。通常用來跟蹤輸出到一個文件中
BASHOPTS        # 當前啟用的bash shell選項的列表
BASHPID         # 當前bash進程的PID
COLUMNS         # 當前bash shell實例所用終端的寬度
COMP_LINE       # 當前命令行
COMP_POINT      # 當前光標位置相對於當前命令起始的索引
COMP_KEY        # 用來調試shell函數不全功能的最後一個鍵
COMP_TYPE       # 一個整數值,表示所嘗試的不全類型,用以完成shell函數補全
COMP_WORDBREAKS # Readline庫中用於單詞補全的詞分隔字符
COMP_WORDS      # 含有當前命令行所有單詞的數組變量
COMPREPLY       # 含有由shell函數生成的可能填充代碼的數組變量
COPROC          # 占用未命名的協進程的I/O文件描述符的數組變量
DIRSTACK        # 含有目錄棧當前內容的數組變量
EMACS           # 設置為‘t‘時,表明emasc shell緩沖區正在工作,而編輯功能被禁止
ENV             # 如果設置了該環境變量,在bash shell腳本運行之前會先執行已定義的啟動文件(僅用於當bash shell以POSIX模式被調用時)
EUID            # 當前用戶的有效用戶ID(數字形式)
FCEDIT          # 供fc命令使用的默認編輯器
FIGNORE         # 在進行文件名不全時可以忽略後綴名列表,由冒號分分隔
FUNCNAME        # 當執行的shell函數的名稱
FUNCNEST        # 當設置成非零值時,表示所允許的最大函數嵌套及數(一旦超出,當前命令即被終止)
GLOBIGNORE      # 冒號分隔的模式列表, 定義了在進行文件名擴展時可以忽略一組文件名。
GROUPS          # 含有當前用戶屬組列表的數組變量
histchars       # 控制歷史記錄擴展,最多可有3個字符
HISTCMD         # 當前命令在歷史記錄中的編號
HISTCONFTROL    # 控制哪些命令留在歷史記錄列表中
HISTFILE        # 保存shell歷史記錄列表的文件名(默認是 .bash_history)
HISTFILESIZE    # 最多在歷史文件中存多少行
HISTTIMEFORMAT  # 如果設置了且非空,就用作格式化字符串,以顯示bash歷史中每條命令的時間戳
HISTIGNORE      # 由冒號分隔的模式列表,用來決定歷史文件中哪些命令會被忽略
HISTSIZE        # 最多在歷史文件中存多少條命令
HOSTFILE        # shell在補全主機名時讀取的文件名稱
HOSTNAME        # 當前主機的名稱
HOSTTYPE        # 當前運行bash shell的機器
IGNOREEOF       # shell在退出前必須受到連續的EOF字符的數量(如果這個值不存在,默認是1)
INPUTRC         # Readline初始化文件名(默認是.inputrc)
LANG            # shell的語言環境類別
LC_ALL          # 定義了一個語言環境類別,能夠覆蓋LANG變量
LC_CTYPE        # 決定如何解釋出現在文件名擴展和模式匹配中的字符
LC_COLLATE      # 設置字字符串時用的排序規則
LC_MESSAGES     # 在解釋前面帶有$的雙引號字符時,該環境變量決定了所采用的語言環境設置
LC_NUMERIC      # 決定著格式化數字時采用的語言環境設置
LINENO          # 當前執行的腳本的行號
LINES           # 定義了終端上可見的行數
MACHTYPE        # 用‘CPU-公司-系統‘(CPU-company-system)格式定義的系統類型
MAPFILE         # 一個數組變量,當mapfile命令未指定數組變量作為參數時,它存儲了mapfile所讀入的文本
MAILCHECK       # shell查看新郵件的頻率(以秒為單位,默認值是60)
OLDPWD          # shell之前的工作目錄
OPTERR          # 當設置為1時,bash shell會顯示getopts命令產生的錯誤
OSTYPE          # 定義了shell 所在的操作系統
PIPESTATUS      # 含有前臺進程的退出狀態列表的數組變量
POSIXLY_CORRECT # 設置了的話,bash會以POSIX模式啟動
PPID            # bash shell父進程的PID
PROMPT_COMMAND  # 設置了的話,在命令行主提示符顯示之前會執行這條命令
PROMPT_DIRTRIM  # 用來定義當啟用\w或\w提示符字符串轉移時顯示的尾部目錄名的數量,被刪除的目錄名會用一組英文據點替換。
PS3             # select 命令的提示符
PS4             # 如果使用了bash的-x選項,在命令行之前顯示的提示信息
PWD             # 當前工作目錄
RANDOM          # 返回一個0 ~ 32767的隨機數(對其的賦值可作為隨機數生成器的種子)
READLINE_LINE   # 當使用bind -x命令時,存儲Readline緩沖區的內容
READLINE_POINT  # 當使用bind -x命令時,表示Readline緩沖區內容插入點的當前位置
REPLY           # read命令的默認變量
SECONDS         # 自從shell啟動到現在的秒數(對其賦值將會重置計數器)
SHELL           # bash shell 的全路徑名
SHELLOPTS       # 已啟用bash shell 選項列表,列表項之間以冒號分割
SHLVL           # shell的層級,每次啟動一個新bash shell,該值增加1
TIMEFORMAT      # 指定了shell的時間顯示格式
TMOUT           # select和read命令在沒輸入的情況下等待多久(以秒為單位),默認值為0,表示無限長
TMPDIR          # 目錄名,保存bash shell創建的臨時文件
UID             # 當前用戶的真實用戶ID(數字形式)




Linux 變量的使用