首页 >> 学习 >> Shell脚本编程基础 >> 环境变量
环境变量

本节重要性:★★★★★    本节难度:★★★★★

环境变量指在操作系统中用来指定操作系统运行环境的一些参数。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特殊变量和环境变量的作用有所不同,但在引用时前面都有$符号。自定义变量和环境变量可以赋值,赋值时变量前没有$并且等号前后不能有空格。

<<上一节  下一节>>