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