linux 的變數可分為兩類:環境變數和本地變數
環境變數,或者稱為全域性變數,存在與所有的shell 中,在你登陸系統的時候就已經有了相應的系統定義的環境變數了。linux 的環境變數具有繼承性,即子shell 會繼承父shell 的環境變數。
本地變數,當前shell 中的變數,很顯然本地變數中肯定包含環境變數。linux 的本地變數的非環境變數不具備繼承性。
一、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 ,都會去獲取相應的特殊的環境變數和特殊操作。
5. ~/.bash_logout:
當每次退出系統( 退出bash shell) 時, 執行該檔案。
二、幾個命令
1. env 和printenv
這兩個變數用於列印所有的環境 變數:
2. set
用於顯示與設定當前本地 變數。單獨乙個set 就顯示了當前環境的所有的變數,它肯定包括環境變數和一些非環境變數
3.unset
用於清除變數。不管這個變數是環境變數還是本地變數,它都可以清除。
-事例- 下面是清除本地變數
[oracle@devdb1 oracle]$ set|grep mynamemyname=ilonng
[oracle@devdb1 oracle]$ unset myname
[oracle@devdb1 oracle]$
set|grep myname
-事例- 下面是清除環境變數
[oracle@devdb1 oracle]$ env|grep mynamemyname=ilonng
[oracle@devdb1 oracle]$ unset myname
[oracle@devdb1 oracle]$ env|grep myname
4. export
用於把變數變成當前shell 和其子shell 的環境變數,存活期是當前的shell 及其子shell ,因此重新登陸以後,它所設定的環境變數就消失了。如何將環境變數永久化?修改上面介紹的那幾個環境變數的配置檔案
5. 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環境變數(一)
linux 的變數可分為兩類 環境變數和本地變數 環境變數,或者稱為全域性變數,存在與所有的shell 中,在你登陸系統的時候就已經有了相應的系統定義的環境變數了。linux 的環境變數具有繼承性,即子shell 會繼承父shell 的環境變數。本地變數,當前shell 中的變數,很顯然本地變數中肯...
linux環境程式設計 環境變數 列印環境變數
在shell程式設計主題中,我們已經大致的介紹過 環境變數和本地變數啦 我們今天來具體的介紹介紹,那環境變數到底是什麼呢?是我 一.環境變數含義 特徵 環境變數是指 作業系統中用來指定作業系統執行環境的一下引數 1 特徵 字串 有統一的格式 名 值 值 值用來描述程序的環境資訊 2 使用形式 與命令...
linux環境變數
初次學習lliux對環境變數的知識甚是不解決,特花費乙個上午的時間總結了一下,可以說是全面!如各位有更加詳細的見解不妨告知!定製環境變數 環境變數是和shell緊密相關的,使用者登入系統後就啟動了乙個shell。對於linux來說一般是bash,但也可以重新設定或切換到其它的 shell。環境變數是...