許多程序和腳本都使用環境變量來獲取系統信息,並存儲臨時數據和配置信息;程序員
用來存儲關於shell會話和工做環境的信息,就叫作環境變量;shell
bash shell下兩種類型:數組
一、全局變量;bash
二、局部變量;命令行
全局環境變量再shell會話,和在該shell中產生的子進程中均可見。blog
Linux系統,默認狀況下會支持一些全局環境變量,經過printenv來查看全局環境變量;索引
使用echo命令來查看某個環境變量:three
例如:echo $HOME #變量前面必須加上$符號;在子進程中,這個變量依然生效;進程
本地環境變量,只在定義他們的本地進程中生效可見;沒有命令能夠只顯示本地環境變量;字符串
set命令顯示特定進程的全部環境變量集。set中看到的除了printenv中的變量外的全部變量,都是本地環境變量
能夠在bash shell中直接設置本身的環境變量。
test=testing
echo $test
若是是字符串,就須要使用引號
test='testing a long string'
echo $test
【注意:咱們使用小寫字母來定義本地環境變量】
*環境變量名稱、等號和值之間沒有空格,這一點尤其重要*
同時:若是在子進程中設置了本地環境變量,則一旦離開子進程,本地環境變量將再也不可用;
咱們須要建立一個本地環境變量,而後將其導出到全局環境中。這個過程經過export命令來完成;
test='testing a long string'
echo $test
export test
bash
echo $test #此時,test變量再子進程bash中也會生效了;
unset能夠爲咱們完成刪除環境比那輛的操做;
test=testing
export test
unset test
默認的Bourne的環境變量:
一、CDPATH cd命令的搜索路徑
二、HOME 當前用戶的主目錄
三、IFS 用於分隔字段的字符列表,shell使用它們分隔本文字符串
四、MAIL 當前用戶郵箱文件名,對於新郵件,bash shell將檢查該文件
五、MAILPATH 當前用戶郵箱的多個文件名,由冒號分隔。對於新郵件,bash shell將檢查該列表中的各個文件
六、OPTARG getopts命令處理的最後一個選項參數的值
七、OPTIND getopts命令處理的最後一個選項參數的索引值
八、PATH 冒號分隔的目錄列表,shell將在這些目錄中查找命令
九、PS1 主shell命令行界面提示字符串
十、PS2 次shell命令行界面提示字符串
bash shell本身的環境變量:
echo $PATH
PATH=$PATH:/home/rich/test
程序員經常使用技巧
PATH=$PATH:. #後面直接加點(.),將當前目錄添加到PATH中去;
經過Linux啓動bash shell的時候,系統會讀取一些文件,這些文件被稱爲啓動文件。文件裏面包含了啓動bash shell的一些方法,能夠採用三種方式來啓動bash shell:
一、在登陸時做爲默認登陸shell
二、做爲非登陸shell的交互式shell
三、做爲非交互式shell運行腳本
登陸bash shell後,系統會查找四個常見文件:/etc/profile、$HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile;
一、/etc/profile文件
/etc/profile文件是bash shell在系統上的主默認啓動文件。系統上的每個用戶在登陸shell的時候都會執行這個啓動文件。另外3個屬於特定用戶,能夠根據用戶需求來本身定義;
咱們能夠在/etc/profile底部添加export行;
例如:export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
若是使用的比那輛比較大,或者是一個執行文件,可使用/etc/profile.d目錄;它是Linux系統提供了一個放置特定應用程序的啓動文件的地方。
二、$HOME啓動文件
另外的三個啓動文件用於特定用戶的環境變量,用戶能夠編輯這些文件來添加本身啓動的bash shell會話都爲活動狀態的環境變量;
bash 回車,這樣的話啓動了一個bash shell而沒有登陸系統,就是交互式的shell。交互式的shell與登陸shell的行爲不一樣,但它仍然提供了CLI的提示符界面;
交互式的shell不會處理/etc/profile文件,相反他會檢查$HOME/。bashrc文件;
.bashrc文件執行兩個任務:一、檢查/etc目錄中的公共bashrc;二、方便用戶輸入我的別名;
這是系統開始執行shell腳本的shell,它不用擔憂CLI提示符。可是,您仍然但願在每次啓動系統中的腳本時運行特定的腳本啓動命令。
爲了適應這種狀況,bash shell提供連帶BASH_ENV環境變量。當shell開始一個非交互是shell程序時,它將檢查該環境變量表示的待執行啓動文件的名稱。若是該變量有值,則shell將執行該文件中的命令。在咱們的Linux髮型版本中,此環境變量並不是默認設置;
環境變量能夠做爲數組使用;數組能夠保存多個值,這些值能夠一塊兒引用,也能夠單獨引用;
mytest=(one two three four five)
echo $mytest
echo ${mytest[2]}
echo ${mytest[*]}
mytest[2]=seven #給數組彙總的某個值賦值
unset mytest #移除整個數組變量
alias -p #查看當前支持的別名
alias li='ls -il' #這樣就能夠本身定義命令的顯示格式;
除了直接使用alias命令意外,還能夠隨時在shell中使用它。
命令別名與本地環境變量的行爲類似。它們只對與定義範圍內的shell進程生效;
bash
li #這樣的話,新定義的alias li就無效了;
固然,您也能夠在$HOME/.bashrc啓動文件中去定義,這樣的話,新的交換式的shell界面就會讀取這個alias的配置;