环境变量指在操作系统中用来指定操作系统运行环境的一些参数。Linux环境变量有系统级和用户级两种,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。每个用户的环境变量可能不一样。
1. 环境变量的查看与分类
查看环境变量的值与查看其他变量一样,可以使用echo命令。如:
[xiezy@ibi-genome ~]$ echo $HOSTNAME
ibi-genome
环境变量HOSTNAME的值是Linux主机的名字,使用hostname命令得到的结果是一样的。
显示所有环境变量可用set、env或export命令,env和export(不加参数,等于declare -x)显示的结果基本一样。set命令(不加参数,等于declare命令)显示所有的变量。这几个命令也可以设置环境变量,他们的区别是:
set 显示(设置)shell全部变量(同declare命令) env 显示(设置)用户环境变量 export 显示(设置)当前导出成用户环境变量的shell变量(同declare -x命令)
2. 环境变量的设置
环境变量可以像自定义变量一样赋值,如Linux常用的环境变量PATH定义用户输入的命令查找的路径及顺序,假设您有个程序在自己主目录下的bin目录中,而该目录不在PATH里,您将该目录添加到PATH并用export导出后,便可直接运行该程序而无需给出路径:
[peter@ibi-genome ~]$ echo $PATH /bin:/usr/bin:/usr/local/bin [peter@ibi-genome ~]$ PATH=$PATH:/home/peter/bin [peter@ibi-genome ~]$ echo $PATH /bin:/usr/bin:/usr/local/bin:/home/peter/bin [peter@ibi-genome bin]$ pwd /home/peter/bin [peter@ibi-genome bin]$ cat hello_test.sh #!/bin/bash echo "Hello world!" [peter@ibi-genome bin]$ hello_test.sh Hello world!
PATH=$PATH:/home/peter/bin实际上是把:/home/peter/bin连到PATH原值的后面。修改PATH的值后,还需用export命令将其导出到用户环境:
[peter@ibi-genome ~]$ export PATH
或者将赋值与导出合并成一步:
[peter@ibi-genome ~]$ export PATH=$PATH:/home/peter/bin
shell变量中的用户自定义变量也可以通过export命令导出成用户环境变量。下面的例子显示的是export命令可以将当前shell中的用户自定义变量导出成用户环境变量:
[peter@ibi-genome ~]$ echo $animal #变量animal还没赋值,所以是空的 [peter@ibi-genome ~]$ animal=dog #给变量animal赋值 [peter@ibi-genome ~]$ echo $animal #在当前shell中animal现在有值了 dog [peter@ibi-genome ~]$ set | grep "animal=" #查看set命令结果里有animal变量, #后面加等号确保animal是变量名 animal=dog [peter@ibi-genome ~]$ env | grep "animal=" #查看env命令结果里没有animal变量 [peter@ibi-genome ~]$ export | grep "animal=" #查看export命令结果里也没有animal变量 [peter@ibi-genome ~]$ export animal #使用export命令将自定义变量导出成用户环境变量 [peter@ibi-genome ~]$ env | grep "animal=" #现在env命令结果里有animal变量了 animal=dog [peter@ibi-genome ~]$ export | grep "animal=" #export命令结果里也有animal变量了 declare -x animal="dog"
在Shell命令行中修改或定义的环境变量只在当前登录会话有效,为避免每次登录都修改环境变量,可以将修改环境变量的命令写到用户的环境配置文件,常用的配置文件有:
/etc/profile 此文件为系统所有用户设置环境信息,当用户第一次登录时,该文件被执行, 并从/etc/profile.d目录的配置文件中搜集shell的设置 /etc/bashrc 为每一个运行bash shell的用户执行此文件,文件中执行上面的/etc/profile文件 ~/.bash_profile 用户登录时执行该文件,文件中执行下面的.bashrc文件 ~/.bashrc 执行/etc/bashrc文件 ~/.bash_logout 退出登录前执行该文件,通常做一些清理工作
如果配置所有用户都生效的环境变量,可以写入/etc/bashrc或/etc/profile(需要root权限)。~/.bash_profile、~/.bashrc和~/.bash_logout都是隐藏文件,在用户的主目录下,使用ls -a命令就可以看到,修改这些文件只对该用户生效:
[peter@ibi-genome ~]$ ls -a ~
. .. .bash_history .bash_logout .bash_profile .bashrc .gnome2 .lesshst .lftp
.mozilla .pki prac shell .ssh .viminfo
这些环境配置文件的调用关系如下:
3. 常用环境变量
Linux常用的环境变量有:
HOME 当前用户主目录 PATH 命令查找路径 LOGNAME 当前用户的登录名 UID 当前用户的ID SHELL 当前用户的Shell类型 TERM 终端类型 PWD 当前工作目录的绝对路径名 MAIL 当前用户的邮件存放目录 HISTSIZE 保存历史命令记录的条数 HOSTNAME 主机名称 PS1 主命令提示符 PS2 从命令提示符 IFS 输入域分隔符
这些环境变量的用途可以自己查一下。
与自定义变量一样,环境变量的删除也是unset命令。
尽管自定义变量、位置变量、Shell特殊变量和环境变量的作用有所不同,但在引用时前面都有$符号。自定义变量和环境变量可以赋值,赋值时变量前没有$并且等号前后不能有空格。