Linux環境變數,linux環境變數設定
本文地址: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:~$
linux下更改環境變數問題
按變數的生存周期來劃分,Linux變數可分為兩類,它們的修改方法如下:
(1)永久的:需要修改設定檔,變數永久生效。
常見的設定檔包括:
(1-1)/etc/profile:對所有使用者生效;此檔案為系統的每個使用者佈建環境資訊,當使用者第一次登入時,該檔案被執行;並從/etc/profile.d目錄的設定檔中搜集shell的設定
例如:編輯/etc/profile檔案,添加CLASSPATH變數
# vi /etc/profile
添加一行:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
修改後需要執行重新登入才會生效,也可以執行命令source /etc/profile來生效
(1-2)/etc/bashrc:對所有使用者生效;為每一個運行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取
編輯方法如上,不再贅述
(1-3)~/.bash_profile:僅會對目前使用者有效;每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅僅執行一次
例如:編輯guok使用者目錄(/home/guok)下的.bash_profile
$ vi /home/guok/.bash.profile
添加如下內容:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
修改後需要執行重新登入才會生效,也可以執行命令source /etc/profile來生效
(1-4)~/.bashrc:僅會對目前使用者有效;該檔案包含專用於你的bash shell的bash資訊,當登入時以及每次開啟新的shell時,該該檔案被讀取
編輯方法如上,不再贅述
另外,~/.bashrc等中設定的變數(局部)只能繼承/etc/profile中的變數,他們是"父子"關係
綜述,對上述檔案修改,添加你需要的變數,在啟動一個shell(終端,terminal)時,你所定義的變數均會生效的。
(2)臨時的:使用export命令聲明即可,變數只在當前的shell(BASH)或其子shell(BASH)下是有效,在關閉shell後失效,再開啟新shell時就沒有這個變數,需要使用的話還需要重新定義
在shell的命令列下直接使用[export 變數名=變數值] 定義變數
環境變數的查看
(1)使用echo命令查看單個環境變數。例如:
echo $PATH
(2)使用env查看所有環境變數。例如:
env
(3)使用set查看所有本地定義的環境變數。例如:
set
另外,unset可以刪除指定的環境變數。
常用的環境變數
PATH 決定了shell將到哪些目錄中尋找命令或程式
HOME 目前使用者主目錄
HISTSIZE 記錄數
LOGNAME 目前使用者的登入名稱
HOSTNAME 指主機的名稱
SHELL 目前使用者Shell類型
LANG......餘下全文>>
linux環境變數的設定
1.使用命令echo顯示環境變數
本例使用echo顯示常見的變數HOME
$ echo $HOME
/home/kevin
2.設定一個新的環境變數
$ export MYNAME=”my name is kevin”
$ echo $ MYNAME
my name is Kevin
3.修改已存在的環境變數
接上個樣本
$ MYNAME=”change name to jack”
$ echo $MYNAME
change name to jack
4.使用env命令顯示所有的環境變數
$ env
HOSTNAME=localhost.localdomain
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
SSH_CLIENT=192.168.136.151 1740 22
QTDIR=/usr/lib/qt-3.1
SSH_TTY=/dev/pts/0
……
5.使用set命令顯示所有本地定義的Shell變數
$ set
BASH=/bin/bash
BASH_ENV=/root/.bashrc
……
6.使用unset命令來清除環境變數
$ export TEMP_KEVIN=”kevin” #增加一個環境變數TEMP_KEVIN
$ env | grep TEMP_KEVIN #查看環境變數TEMP_KEVIN是否生效(存在即生效)
TEMP_KEVIN=kevin #證明環境變數TEMP_KEVIN已經存在
$ unset TEMP_KEVIN #刪除環境變數TEMP_KEVIN
$ env | grep TEMP_KEVIN #查看環境變數TEMP_KEVIN是否被刪除,沒有輸出顯示,證明TEMP_KEVIN被清除了。
7.使用readonly命令設定唯讀變數
註:如果使用了readonly命令的話,變數就不可以被修改或清除了。
$ export TEMP_KEVIN ="kevin" #增加一個環境變數TEMP_KEVIN
$ readonly TEMP_KEVIN #將環境變數TEMP_KEVIN設為唯讀
$ env | grep TEMP_KEVIN #查看環境變數TEMP_KEVIN是否生效
TEMP_KEVIN=kevin #證明環境變數TEMP_KEVIN已經存在
$ unset TEMP_KEVIN #會提示此變數唯讀不能被刪除
-bash: unset: TEMP_KEVIN: cannot unset: readonly variable
$ TEMP_KEVIN ="tom" #修改變數值為tom會提示此變數唯讀不能被修改
-bash: TEMP_KEVIN: readonly variable
8.通過修改環境變數定義檔案來修改環境變數。
需要注意的是,一般情況下,僅修改普通使用者環境變數設定檔,避免修改根使用者的環境定義檔案,因為那樣可能會造成潛在的危險。
$ cd ~ ......餘下全文>>