Shell編程之更改與查看常用環(huán)境變量
本文轉(zhuǎn)載自微信公眾號(hào)「Linux常用命令」,作者妖生。轉(zhuǎn)載本文請(qǐng)聯(lián)系Linux常用命令公眾號(hào)。
面試官:與哪些環(huán)境變量相關(guān)Shell命令?
答:export、declare、source、env、set/unset。
面試官:它們分別有什么作用?
答:……
正文
export的作用就是設(shè)置全局變量,可以在整個(gè)Shell環(huán)境中被引用。
沒(méi)有使用export設(shè)置的變量,只能在自己的Shell腳本中起作用。我們也可以直接使用【export】命令來(lái)查看可以被全局使用的環(huán)境變量。
示例如下:
- [root@linuxido ~]# export ## 查看所有export設(shè)置的環(huán)境變量
- declare -x CLASSPATH=".:/usr/local/java/jdk1.8.0_131/lib:/usr/local/java/jdk1.8.0_131/jre/lib:"
- declare -x DISPLAY="localhost:10.0"
- declare -x GEM_HOME="/usr/local/rvm/gems/ruby-2.7.0"
- …… ## declare 設(shè)置環(huán)境變量
我們可以看到【declare -x】也等同于【export】,所以定義環(huán)境變量的方式基本上有三種,示例如下:
- export JAVA_HOME=/usr/local/java/jdk1.8.0_131 ## 1、【export 變量名=變量值】
- PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin ## 2、先設(shè)置【變量名=變量值】
- export PATH ## 再設(shè)置【export 變量名】
- declare -x DISPLAY="localhost:10.0" ## 3、【declare –x 變量名=變量值】
一般在使用export定義過(guò)全局變量后,都會(huì)使用【source】刷新文件中定義的環(huán)境變量,使其檔次生效(使用點(diǎn)【.】可達(dá)到同樣效果)如刷新系統(tǒng)全局變量【source /etc/profile】或刷新用戶全局變量【. ~/.bash_profile】。
不用source刷新變量的話則要重新登錄才能生效。
env也可以查看環(huán)境變量,不同于export,它只查看用戶的環(huán)境變量。
示例如下:
- [root@linuxido ~]# env ## 查看用戶環(huán)境變量
- ……
- HOME=/root
- LOGNAME=root
- ……
【set】也可以顯示本地用戶變量,但是不只是本地用戶變量,還包括Shell特有的變量,如BASH_ALIASES 、BASH_ARGC。示例如下:
- [root@linuxido ~]# set
- BASH=/bin/bash
- BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
- BASH_ALIASES=()
- BASH_ARGC=()
- BASH_ARGV=()
- ……
set還有個(gè)作用是可以調(diào)試腳本,即在Shell中注明【set -x】,詳見(jiàn)10.4.2章節(jié)。
使用【export】可以臨時(shí)設(shè)置一個(gè)環(huán)境變量,示例如下:
- [root@linuxido ~]# export LINUX_HOME=linuxido.com ## export設(shè)置臨時(shí)變量
- [root@linuxido ~]# echo $LINUX_HOME ## 打印臨時(shí)變量值
- linuxido.com
臨時(shí)消除一個(gè)環(huán)境變量,使用【unset】,示例如下:
- [root@linuxido /shell]# echo $LINUX_HOME ## 查看臨時(shí)變量
- linuxido.com
- [root@linuxido /shell]# unset LINUX_HOME ## unset取消臨時(shí)變量
- [root@linuxido /shell]# echo $LINUX_HOME ## 臨時(shí)變量已經(jīng)沒(méi)有值了
- [root@linuxido /shell]##
附錄:常用環(huán)境變量
在bashrc、profile等環(huán)境變量設(shè)置文件中,設(shè)置了一堆我們常用的環(huán)境變量,示例如下:
- [root@ linuxido ~]# echo $SHELL ## 查看當(dāng)前Shell變量
- /bin/bash
- [root@linuxido ~]# echo $PS1 ## 查看PS1環(huán)境變量
- [\u@\h \w]\$\$
- [root@dihuiyuan logs]# echo $PS2 ## 多行命令提示符,也可以更改此變量值為->
- > ## 一個(gè)非常長(zhǎng)的命令可以通過(guò)在末尾加“\”使其分行顯示
- [root@dihuiyuan logs]# echo $PS3 ## 默認(rèn)為空,select循環(huán)語(yǔ)句的默認(rèn)提示
- [root@dihuiyuan logs]# echo $PS4 ## bash -x或set -x,調(diào)試腳本時(shí)輸出的命令提示符
- +
- [root@linuxido ~]# echo $HOME ## 查看用戶家目錄
- /root
- [root@linuxido ~]# echo $USER ## 查看用戶
- root
- [root@linuxido ~]# echo $LANG ## 查看是否中文環(huán)境
- zh_CN.UTF-8
- [root@linuxido ~]# echo $HISTSIZE ## 查看歷史命令條數(shù)
- 1000
- [root@linuxido ~]# echo $PATH ## 查看系統(tǒng)環(huán)境PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin……
當(dāng)然,這僅僅是冰山一角,有興趣的可以查閱相關(guān)文件或文檔。