Linux是一个多用户的操作系统,每个用户登录系统,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,默认环境实际上是一组环境变量的定义。通过相应的系统环境变量,用户可以对自己的运行环境进行个性化设置。
一、Shell变量
Shell 变量名可以由下划线、字母、数字组成,单变量不能以数字开头,并注意区分大小写。在 Shell 中,要对Shell 的变量继续操作,通常使用以下几个命令。
# 设置变量: 变量名=变量值[hk@localhost ~]$ MYPATH=/home/hk/c/# 使用变量: $变量名[hk@localhost ~]$ echo $MYPATH/home/hk/c/# 查看变量可以使用 set 命令,并可以利用管道查找需要的环境变量[hk@localhost ~]$ set|grep MYPATHMYPATH=/home/hk/c/# 清除变量使用 unset 命令[hk@localhost ~]$ unset MYPATH# 因为变量已被清除,打印一行空行[hk@localhost ~]$ echo $MYPATH[hk@localhost ~]$
Shell 中的变量类型有很多种,这里主要介绍两种,
- 本地变量:
本地变量只存在于当前Shell,使用 set 命令将显示所有变量的列表、环境变量和函数。由于本地变量只存在于当前Shell,重新登录或重启会使设置的变量的失效,并且已经登录的多个Shell之间的自定义环境变量时互不可见的。 - 环境变量:
环境变量一般是Shell保留的一些变量,这些变量决定了用户与系统交互的一些特性。几个常用的环境变量说明如下所示。
 
参数 说明HOME 当前用户的主目录,同符号"~"PATH 一个用冒号分隔的目录列表,Shell执行命令时首先从这些目录里查找相关命令PS1 主要提示符PS2 次要提示符HISTSIZE 在历史列表中记录的最大命令数LANG 语言环境变量设置PPID 当前Shell父进程的进程IDRANDOM 一个 0 到 32767 之间的随机整数TERM 终端的类型UID 当前用户的识别字,取值由数位构成的字串
二、Shell环境变量的配置文件
当登录到 Linux 系统后,需要给当前用户设置一些默认的环境变量,例如主机名HOSTNAME,命令搜索路径 PATH 或终端类型 TERM 等。这些变量在用户登录时通过用户的环境变量配置文件来设置。在用户主目录下有一下变量相关的文件,如下所示:
[hk@localhost ~]$ ls -a .bash*.bash_history .bash_logout .bash_profile .bashrc# .bash_history 记录了当前用户执行过的历史命令# .bash_logout 表示退出当前Shell时需要执行的命令# .bash_profile 表示登录当前Shell时需要执行的命令# .bashrc 表示每次打开新的Shell时需要执行的命令
.bash_profile 只在会话开始时被载入,而 .bashrc 在每次打开新的终端时都要被读取。一般为了统一设置,可以把所有设置都放进 .bashrc 。
以上这些文件是每一位用户的设置。系统级的设置存储在 /etc/profile、/etc/bashrc 及目录 /etc/profile.d 下的文件中,这些文件的编辑需要具备 root 权限,所以一般通过用户自己的环境变量定义文件设置属于该用户的环境变量。当系统与用户级的设置发生冲突时,将优先采用用户的设置。
三、Shell使用中的常见问题
1. 显示所有环境变量
在 Linux 系统中显示所有环境变量可以使用 export、env、 set 等命令,可以和管道结合使用来模糊查找某些环境变量。
# 先使用 set 命令来显示所有环境变量,然后利用管道将输出传给 grep 命令查找匹配的环境变量[hk@localhost ~]$ set | grep PATHPATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hk/.local/bin:/home/hk/bin[hk@localhost ~]$ set | grep HISHISTCONTROL=ignoredupsHISTFILE=/home/hk/.bash_historyHISTFILESIZE=1000HISTSIZE=1000[hk@localhost ~]$
2. 清除环境变量
要清除环境变量,可以使用 unset 或 使用 export 将某个变量设置为空,如下所示:
# 使用export 命令设置 MYPATH 环境变量
[root@localhost hk]# export  MYPATH=/home/hk/c/
# 使用 echo 显示MYPATH
[root@localhost hk]# echo $MYPATH              
/home/hk/c/
# 使用 unset 清除 MYPATH
[root@localhost hk]# unset MYPATH
[root@localhost hk]# echo $MYPATH
[root@localhost hk]# export  MYPATH=/home/hk/c/
[root@localhost hk]# echo $MYPATH              
/home/hk/c/
# 使用 export 清除 MYPATH
[root@localhost hk]# export  MYPATH=
[root@localhost hk]# echo $MYPATH   
                    # 因为 MYPATH  已被清空,所以显示空行
[root@localhost hk]#
                    