Shell編程之更改與查看常用環境變量
本文轉載自微信公眾號「Linux常用命令」,作者妖生。轉載本文請聯系Linux常用命令公眾號。
面試官:與哪些環境變量相關Shell命令?
答:export、declare、source、env、set/unset。
面試官:它們分別有什么作用?
答:……
正文
export的作用就是設置全局變量,可以在整個Shell環境中被引用。
沒有使用export設置的變量,只能在自己的Shell腳本中起作用。我們也可以直接使用【export】命令來查看可以被全局使用的環境變量。
示例如下:
- [root@linuxido ~]# export ## 查看所有export設置的環境變量
- 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 設置環境變量
我們可以看到【declare -x】也等同于【export】,所以定義環境變量的方式基本上有三種,示例如下:
- export JAVA_HOME=/usr/local/java/jdk1.8.0_131 ## 1、【export 變量名=變量值】
- PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin ## 2、先設置【變量名=變量值】
- export PATH ## 再設置【export 變量名】
- declare -x DISPLAY="localhost:10.0" ## 3、【declare –x 變量名=變量值】
一般在使用export定義過全局變量后,都會使用【source】刷新文件中定義的環境變量,使其檔次生效(使用點【.】可達到同樣效果)如刷新系統全局變量【source /etc/profile】或刷新用戶全局變量【. ~/.bash_profile】。
不用source刷新變量的話則要重新登錄才能生效。
env也可以查看環境變量,不同于export,它只查看用戶的環境變量。
示例如下:
- [root@linuxido ~]# env ## 查看用戶環境變量
- ……
- 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還有個作用是可以調試腳本,即在Shell中注明【set -x】,詳見10.4.2章節。
使用【export】可以臨時設置一個環境變量,示例如下:
- [root@linuxido ~]# export LINUX_HOME=linuxido.com ## export設置臨時變量
- [root@linuxido ~]# echo $LINUX_HOME ## 打印臨時變量值
- linuxido.com
臨時消除一個環境變量,使用【unset】,示例如下:
- [root@linuxido /shell]# echo $LINUX_HOME ## 查看臨時變量
- linuxido.com
- [root@linuxido /shell]# unset LINUX_HOME ## unset取消臨時變量
- [root@linuxido /shell]# echo $LINUX_HOME ## 臨時變量已經沒有值了
- [root@linuxido /shell]##
附錄:常用環境變量
在bashrc、profile等環境變量設置文件中,設置了一堆我們常用的環境變量,示例如下:
- [root@ linuxido ~]# echo $SHELL ## 查看當前Shell變量
- /bin/bash
- [root@linuxido ~]# echo $PS1 ## 查看PS1環境變量
- [\u@\h \w]\$\$
- [root@dihuiyuan logs]# echo $PS2 ## 多行命令提示符,也可以更改此變量值為->
- > ## 一個非常長的命令可以通過在末尾加“\”使其分行顯示
- [root@dihuiyuan logs]# echo $PS3 ## 默認為空,select循環語句的默認提示
- [root@dihuiyuan logs]# echo $PS4 ## bash -x或set -x,調試腳本時輸出的命令提示符
- +
- [root@linuxido ~]# echo $HOME ## 查看用戶家目錄
- /root
- [root@linuxido ~]# echo $USER ## 查看用戶
- root
- [root@linuxido ~]# echo $LANG ## 查看是否中文環境
- zh_CN.UTF-8
- [root@linuxido ~]# echo $HISTSIZE ## 查看歷史命令條數
- 1000
- [root@linuxido ~]# echo $PATH ## 查看系統環境PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin……
當然,這僅僅是冰山一角,有興趣的可以查閱相關文件或文檔。