環(huán)境變量是一些已經(jīng)賦了值的變量,在bash shell中柿估,環(huán)境變量分為兩類:
* 全局變量
* 局部變量
查看變量
set
set命令會(huì)顯示出全局變量循未、局部變量以及用戶定義變量。
env
[root@zzz ~]# env
XDG_SESSION_ID=18849
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_TTY=/dev/pts/2
USER=root
_=/usr/bin/env
...
printenv
[root@zzz ~]# printenv
XDG_SESSION_ID=18849
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_TTY=/dev/pts/2
USER=root
_=/usr/bin/env
...
[root@zzz ~]# printenv USER
root
printenv與env一樣官份,printenv多了可以顯示單個(gè)變量的功能
設(shè)置變量
局部變量
#變量名只厘、等號(hào)和值之間沒有空格
my_variable=Hello
echo $my_variable
#Hello
全局變量
my_variable="I am Global now"
export my_variable
echo $my_variable
#I am Global now
可見性
全局環(huán)境變量對(duì)于shell會(huì)話和所有生成的子shell都是可見的。局部變量則只對(duì)創(chuàng)建它們的
shell可見舅巷。
[root@zzz ~]# var1=5
[root@zzz ~]# echo $var1
5
[root@zzz ~]# bash
[root@zzz ~]# echo $var1
[root@zzz ~]
全局環(huán)境變量修改只對(duì)當(dāng)前shell有效
[root@zzz ~]# printenv GOROOT
/usr/local/go1
[root@zzz ~]# GOROOT=/usr/local/go
[root@zzz ~]# printenv GOROOT
/usr/local/go
[root@zzz ~]# GOROOT=/usr/local/go1
[root@zzz ~]# printenv GOROOT
/usr/local/go1
[root@zzz ~]# bash
[root@zzz ~]# printenv GOROOT
/usr/local/go
刪除變量unset
如果你是在子進(jìn)程中刪除了一個(gè)全局環(huán)境變量羔味,這只對(duì)子進(jìn)程有效。該全局環(huán)境變量在父進(jìn)程中依然可用
[root@zzz ~]# globle_var=5
[root@zzz ~]# export globle_var
[root@zzz ~]# echo $globle_var
5
[root@zzz ~]# bash
[root@zzz ~]# echo $globle_var
5
[root@zzz ~]# unset globle_var
[root@zzz ~]# echo $globle_var
[root@zzz ~]# exit
exit
[root@zzz ~]# echo $globle_var
5
系統(tǒng)環(huán)境變量初始化
Linux系統(tǒng)中有很多默認(rèn)環(huán)境變量钠右,我們需要了解變量的加載過程赋元。
啟動(dòng)bash shell有3種方式:
- 登錄時(shí)作為默認(rèn)登錄shell(賬號(hào)密碼登錄)
- 作為非登錄shell的交互式shell(界面系統(tǒng)打開終端,子shell)
- 作為運(yùn)行腳本的非交互shell(腳本啟動(dòng)shell)
登錄 shell
登錄shell會(huì)從5個(gè)不同的啟動(dòng)文件里讀取命令:
- /etc/profile
- $HOME/.bash_profile
- $HOME/.bashrc
- $HOME/.bash_login
- $HOME/.profile
交互式 shell 進(jìn)程
如果bash是作為交互式shell啟動(dòng)的,它就不會(huì)訪問/etc/profile文件飒房,只會(huì)檢查用戶HOME目錄
中的.bashrc文件搁凸。
非交互式 shell
bash shell提供了BASH_ENV環(huán)境變量。當(dāng)shell啟動(dòng)一個(gè)非交互式shell進(jìn)
程時(shí)狠毯,它會(huì)檢查這個(gè)環(huán)境變量來查看要執(zhí)行的啟動(dòng)文件护糖。如果有指定的文件,shell會(huì)執(zhí)行該文件
里的命令嚼松,這通常包括shell腳本變量設(shè)置