Linux環境變數,linux環境變數設定

來源:互聯網
上載者:User

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 ~ ......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.