一、變數分類
linux 的變數可分為兩類:環境變數和本地變數
環境變數,或者稱為全域性變數,存在與所有的shell 中,在你登陸系統的時候就已經有了相應的系統定義的環境變數了。linux 的環境變數具有繼承性,即子shell 會繼承父shell 的環境變數。
1) 定義環境變數 格式: export variable-name=value (與本地變數的定義相比,多了乙個export關鍵字)
例子:[root@chinaitlab /root]# export domain="chinaitlab.com"
[root@ chinaitlab shell]# vi testenv.sh
#!/bin/bash
echo $domain
[root@chinaitlab shell]# chmod +x testenv.sh
[root@chinaitlab shell]# ./testenv.sh
chinaitlab.com
2) 顯示環境變數 格式: env (本地變數的顯示使用set,環境變數的顯示使用env)
例子: [root@chinaitlab test]# env
3) 清除環境變數 格式:unset variable-name (用法與本地變數相同,都使用unset)
例子: [root@chinaitlab shell]# unset domain
此時再執行./testenv.sh將看不到變數domain的輸出。
本地變數,當前shell 中的變數,很顯然本地變數中肯定包含環境變數。linux 的本地變數的非環境變數不具備繼承性。
1) 定義本地變數 格式: variable-name=value
例子:[root@jike1 /root]# localtest="test"
[root@jike1 /root]# echo $localtest test
2) 顯示本地變數 格式: set
例子:[root@chinaitlab root]# set
3) 清除本地變數 格式:unset variable-name
例如:[root@jike1 /root]# unset localtest
此時再執行echo $localtest將看不到變數localtest的輸出。
二、linux 中環境變數的檔案
當你進入系統的時候,linux 就會為你讀入系統的環境變數,這些環境變數存放在什麼地方,那就是環境變數的檔案中。linux 中有很多記載環境變數的檔案,它們被系統讀入是按照一定的順序的。
1. /etc/profile :
此檔案為系統的環境變數,它為每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行。並從/etc/profile.d 目錄的配置檔案中蒐集shell 的設定。
這個檔案,是任何使用者登陸作業系統以後都會讀取的檔案(如果使用者的shell 是csh 、tcsh 、zsh ,則不會讀取此檔案),用於獲取系統的環境變數,只在登陸的時候讀取一次。
2. /etc/bashrc :
在執行完/etc/profile 內容之後,如果使用者的shell 執行的是bash ,那麼接著就會執行此檔案。另外,當每次乙個新的bash shell 被開啟時, 該檔案被讀取。
每個使用bash 的使用者在登陸以後執行完/etc/profile 中內容以後都會執行此檔案,在新開乙個bash 的時候也會執行此檔案。因此,如果你想讓每個使用bash 的使用者每新開乙個bash 和每次登陸都執行某些操作,或者給他們定義一些新的環境變數,就可以在這個裡面設定。
3. ~/.bash_profile :
每個使用者都可使用該檔案輸入專用於自己使用的shell 資訊。當使用者登入時,該檔案僅僅執行一次,預設情況下,它設定一些環境變數,執行使用者的.bashrc 檔案。
單個使用者此檔案的修改只會影響到他以後的每一次登陸系統。因此,可以在這裡設定單個使用者的特殊的環境變數或者特殊的操作,那麼它在每次登陸的時候都會去獲取這些新的環境變數或者做某些特殊的操作,但是僅僅在登陸時。
4. ~/.bashrc :
該檔案包含專用於單個人的bash shell 的bash 資訊,當登入時以及每次開啟乙個新的shell 時, 該該檔案被讀取。
單個使用者此檔案的修改會影響到他以後的每一次登陸系統和每一次新開乙個bash 。因此,可以在這裡設定單個使用者的特殊的環境變數或者特殊的操作,那麼每次它新登陸系統或者新開乙個bash ,都會去獲取相應的特殊的環境變數和特殊操作。
~/.bash_logout :
當每次退出系統( 退出bash shell) 時, 執行該檔案。
~/.bash_profile 使用者登入時被讀取,其中包含的命令被執行
~/.bashrc 啟動新的shell時被讀取,並執行
~/.bash_logout shell 登入退出時被讀取
使用者登入後載入profile
和bashrc
的流程如下:
1)/etc/profile-------->/etc/profile.d/*.sh
2)$home/.bash_profile-------->$home/.bashrc---------->/etc/bashrc
說明:首先,bash
執行/etc/profile
指令碼,/etc/profile
指令碼先依次執行/etc/profile.d/*.sh
隨後,bash
會執行使用者主目錄下的.bash_profile
指令碼,.bash_profile
指令碼會執行使用者主目錄的.bashrc
指令碼,而.bashrc
指令碼會執行/etc/bashrc
指令碼至此,所有的環境變數和初始化設定都已經載入完成.
bash
隨後呼叫terminfo
和inputrc
,完成終端屬性和鍵盤對映的設定.
其中path
這個變數特殊說明一下:
如果是超級使用者登入,在沒有執行/etc/profile
之前,path
已經設定了下面的路徑:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
如果是普通使用者,path
在/etc/profile
執行之前設定了以下的路徑:
/usr/local/bin:/bin:/usr/bin
這裡要注意的是:
在使用者切換並載入變數,例如su-
,這時,如果使用者自己切換自己,比如root
使用者再用su- root
切換的話,載入的path
和上面的不一樣.
準確的說,是不總是一樣.
所以,在/etc/profile
指令碼中,做了如下的配置:
if [ `id -u` = 0 ]; then
pathmunge /sbin
pathmunge/usr/sbin
pathmunge /usr/local/sbin fi
三、幾個命令
env 和printenv
這兩個變數用於列印所有的環境 變數:
set
用於顯示與設定當前本地 變數。單獨乙個set 就顯示了當前環境的所有的變數,它肯定包括環境變數和一些非環境變數
unset
用於清除變數。不管這個變數是環境變數還是本地變數,它都可以清除。
-- 下面是清除本地變數
[oracle@devdb1 oracle]$ set|grep myname
myname=ilonng
[oracle@devdb1 oracle]$ unset myname
[oracle@devdb1 oracle]$ set|grep myname
-- 下面是清除環境變數
[oracle@devdb1 oracle]$ env|grep myname
myname=ilonng
[oracle@devdb1 oracle]$ unset myname
[oracle@devdb1 oracle]$ env|grep myname
export
用於把變數變成當前shell 和其子shell 的環境變數,存活期是當前的shell 及其子shell ,因此重新登陸以後,它所設定的環境變數就消失了。如何將環境變數永久化?修改上面介紹的那幾個環境變數的配置檔案
source
當直接執行乙個指令碼的時候,其實是在乙個子shell 環境執行的,即開啟了乙個子shell 來執行這個指令碼,指令碼執行完後該子shell 自動退出。
有沒有辦法在當前shell 中執行乙個指令碼呢?使用source 命令就可以讓指令碼在當前shell 中執行。如:
[oracle@dbamonitor nbu]$ cat test.sh -- 檢視指令碼內容,顯示變數內容
echo $myname
[oracle@dbamonitor nbu]$ echo $myname -- 變數存在,內容是ilonng
ilonng
[oracle@dbamonitor nbu]$ set |grep myname -- 變數是本地變數
myname=ilonng
[oracle@dbamonitor nbu]$ env |grep myname -- 變數不是環境變數
[oracle@dbamonitor nbu]$ sh test.sh -- 直接執行,新開子shell ,非環境變數的本地變數不具備繼承性,在子shell 中不可見
-- 這裡什麼都沒有輸出
linux環境程式設計 環境變數 列印環境變數
在shell程式設計主題中,我們已經大致的介紹過 環境變數和本地變數啦 我們今天來具體的介紹介紹,那環境變數到底是什麼呢?是我 一.環境變數含義 特徵 環境變數是指 作業系統中用來指定作業系統執行環境的一下引數 1 特徵 字串 有統一的格式 名 值 值 值用來描述程序的環境資訊 2 使用形式 與命令...
linux環境變數
初次學習lliux對環境變數的知識甚是不解決,特花費乙個上午的時間總結了一下,可以說是全面!如各位有更加詳細的見解不妨告知!定製環境變數 環境變數是和shell緊密相關的,使用者登入系統後就啟動了乙個shell。對於linux來說一般是bash,但也可以重新設定或切換到其它的 shell。環境變數是...
Linux環境變數
好吧,我承認這篇文章是轉的.1.顯示環境變數home echo home home redbooks 2.設定乙個新的環境變數hello export hello hello echo hello hello 3.使用env命令顯示所有的環境變數 env hostname redbooks.safe...