本文地址:http://www.cnblogs.com/archimedes/p/linux-envionment-variables.html,轉載請注明源地址。
1.什么是環境變量
bash shell用一個稱作環境變量的特性來存儲有關shell會話和工作環境的信息,它允許你在內存中存儲數據,以便運行在shell上的程序和腳本訪問
在bash shell中,環境變量分為兩類:全局變量和局部變量
(1)全局環境變量
全局環境變量不僅對shell會話可見,對所有shell創建的子進程中需要獲得父進程信息的程序來說非常有用。Linux系統在你開始bash會話之前就設置了一些全局環境變量
系統環境變量的一律用全大寫字母以區別與普通用戶的環境變量
查看全局變量,可以使用printenv命令(由於結果太多,不寫出來)
要顯示單個環境變量,可以使用echo命令。當引用環境變量時,必須在環境變量的名稱前放置一個$符:
wu@ubuntu:~/Ccode$ echo $HOME
/home/wu
(2)局部環境變量
局部環境變量只能在定義它們的進程中可見,查看局部環境變量的列表有點復雜,在Linux系統中並沒有這樣的一個命令只顯示局部環境變量
set命令會顯示某個特定進程設置的所有環境變量,當然也包括全局變量
2.設置環境變量
(1)設置局部環境變量
一旦啟動了bash shell,你就能創建在這個shell進程內可見的局部變量了,你可以通過等號來給環境變量賦值,值可以是數值或字符串:
wu@ubuntu:~$ test=testing
wu@ubuntu:~$ echo $test
testing
如果要給變量賦一個含有空格的字符串,必須用單引號來界定字符串的開始和結尾:
wu@ubuntu:~$ test=testing a long string
a: command not found
wu@ubuntu:~$ test='testing a long string'
wu@ubuntu:~$ echo $test
testing a long string
(2)設置全局環境變量
創建全局環境變量的方法是先創建一個局部環境變量,然后再把它導出到全局環境中
這個過程通過export命令來完成:
wu@ubuntu:~$ echo $test
testing a long string
wu@ubuntu:~$ export test
wu@ubuntu:~$ bash
wu@ubuntu:~$ echo $test
testing a long string
(3)刪除環境變量
可以使用unset命令來刪除環境變量:
wu@ubuntu:~$ echo $test
testing a long string
wu@ubuntu:~$ unset test
wu@ubuntu:~$ echo $test
wu@ubuntu:~$
3.默認shell環境變量
1、BASH :記錄當前bash shell的路徑。
2、BASH_SUBSHELL :記錄當前子shell的層次。BASH_SUBSHELL是從0開始計數的整數。
3、BASH_VERSINFO :是一個數組包含六個元素,這六個元素顯示bash的版本信息。
4、BASH_VERSION :顯示shell版本的信息。
5、DIRSTACK :記錄了棧頂的目錄值,初值為空。
6、GLOBLGNORE :是由冒號分割的模式列表,表示通配時忽略的文件名集合。
7、GROUPS :記錄當前用戶所屬的組。
8、HOME :記錄當前用戶的家目錄,由/etc/passwd的倒數第二個域決定。
9、HOSTNAME :記錄主機名。
10、HOSTTYPE和MACHTYPE :都是記錄系統的硬件架構。
11、IFS :用於設置指定shell域分隔符,默認情況下為空格。
12、OLDPWD :記錄舊的工作目錄。
13、OSTYPE :記錄操作系統類型。
14、PATH :環境變量,顯示當前PATH環境變量的內容。
15、PPID :是創建當前進程的進程號,即當前進程的父進程號
16、PS1 :提示符變量,用於設置提示符格式,用於設置一級shell提示符環境變量。
17、PS2 :用於設置二級shell提示符環境變量。
18、PWD :記錄當前路徑
19、REPLY :REPLY變量與read和select有關。
20、SECONDS:記錄腳本從開始到結束耗費的時間。
21、SHELL :顯示當前所用的shell
22、SHELLOPTS :記錄了處於“開”狀態的shell選項列表,它只是一個只讀變量。
23、SHLVL :記錄了bash嵌套的層次,一般來說,我們啟動第一個Shell時。 $SHLVL=1。如果在這個Shell中執行腳本,腳本中的$SHLVL=2 。
24、TMOUT :用來設置腳本過期的時間,比如TMOUT=3,表示該腳本3秒后過期。
25、UID : 已登用戶的ID
26、USER :顯示當前用戶名字
4.設置PATH環境變量
PATH定義了命令行輸入命令的搜素路徑,如果找不到命令,它會產生一個錯誤:
wu@ubuntu:~$ myprog
myprog: command not found
可以添加新的搜素目錄到現有的PATH環境變量,無需從頭定義,PATH中的目錄之間是用冒號分隔的,所以你只需引用原來的PATH值,然后再給字符串添加新的目錄就行
5.可變數組
環境變量一個很好的功能就是它們可作為數組使用,要給某個環境變量設置多個值,可以把值放在括號里,值與值之間用空格隔開:
wu@ubuntu:~$ mytest=(one two three four five)
wu@ubuntu:~$ echo $mytest
one
只有第一個值顯示出來了。要引用一個單獨的數組元素,必須用代表它在數組中位置的數值索引值,數值要用方括號括起來:
wu@ubuntu:~$ echo ${mytest[2]}
three
要顯示整個數組變量,可用星號作為通配符放在索引值的位置:
wu@ubuntu:~$ echo ${mytest[*]}
one two three four five
你也可以改變某個索引位置的值:
wu@ubuntu:~$ mytest[2]=seven
wu@ubuntu:~$ echo ${mytest[*]}
one two seven four five
你甚至可以用unset命令來刪除數組中的某個值,但是要小心:
wu@ubuntu:~$ unset mytest[2]
wu@ubuntu:~$ echo ${mytest[*]}
one two four five
wu@ubuntu:~$ echo ${mytest[2]}
wu@ubuntu:~$ echo ${mytest[3]}
four
最后,可以在unset命令后跟上數組名來刪除整個數組:
wu@ubuntu:~$ unset mytest
wu@ubuntu:~$ echo ${mytest[*]}
wu@ubuntu:~$