using linux enviroment variables

使用Linux环境变量

5.1 什么是环境变量

bash shell使用一种称为环境变量的特性来存储关于shell会话和工作环境的信息(环境变量的名称由此而来)。该特性还允许你将数据存储在内存中,以便于在shell中运行的程序和脚本访问它们。这是一种便捷的、用于存储持久性数据的方式,这些数据可以标示用户账户、系统、shell或任何需要存储的内容的特性。

bash shell中共有两种类型的环境变量:

l  全局变量;

l  本地变量;

5.1.1 全局环境变量

要查看全局变量,可以使用printenv命令。

通过该命令的输出,我们可以看到bash shell已经设置了许多全局环境变量,其中大多数由系统在登录过程中设置。

5.1.2 本地环境变量

       本地环境变量只在定义它们的本地进程中可见。可以通过set命令显示特定进程的所有环境变量集。这其中包含了全局环境变量和本地环境变量。

5.2 设置环境变量

5.2.1 设置本地环境变量

       为环境变量分配一个数值或者字符串,方法是使用等号将变量指定为具体值。

例如

$ test=hello

那么我们使用

$ echo $test

就可以输出hello

当然如果赋值为一个字符串,需要用单引号括起来,否则空格后的字符会被认为是命令而出错。

       如果创建新环境变量,建议(但不要求)使用小写字母。这用助于区分个人环境变量与系统环境变量。

5.2.2 设置全局环境变量

       创建全局变量的方法是创建一个本地环境变量,然后使用export将它导出到全局环境中。

5.3 移除环境变量

       可以使用unset命令来移除环境变量,在unset命令中引用环境变量时,不要使用美元符号。

5.4 默认的shell环境变量

1BASH :记录当前bash shell的路径。

举例:[root@localhost awK]# echo $BASH

/bin/bash

2BASH_SUBSHELL  :记录当前子shell的层次。BASH_SUBSHELL是从0开始计数的整数。

3BASH_VERSINFO  :是一个数组包含六个元素,这六个元素显示bash的版本信息。

4BASH_VERSION  :显示shell版本的信息。

5DIRSTACK  :记录了栈顶的目录值,初值为空。

6GLOBLGNORE :是由冒号分割的模式列表,表示通配时忽略的文件名集合。

7GROUPS   :记录当前用户所属的组。

8HOME :记录当前用户的家目录,由/etc/passwd的倒数第二个域决定。

9HOSTNAME  :记录主机名。

10HOSTTYPEMACHTYPE :都是记录系统的硬件架构。

11IFS  :用于设置指定shell域分隔符,默认情况下为空格。

[root@localhost awK]# export IFS=:

[root@localhost awK]# echo $PATH

/usr/local/sbin /usr/local/bin /sbin /bin/usr/sbin /usr/bin /root/bin

12OLDPWD   :记录旧的工作目录。

13 OSTYPE  :记录操作系统类型。

14 PATH  :环境变量,显示当前PATH环境变量的内容。

15PPID :是创建当前进程的进程号,即当前进程的父进程号

16PS1  :提示符变量,用于设置提示符格式,用于设置一级shell提示符环境变量。

17PS2  :用于设置二级shell提示符环境变量。

18PWD :记录当前路径

19REPLY  REPLY变量与readselect有关。

20SECONDS:记录脚本从开始到结束耗费的时间。

21SHELL :显示当前所用的shell

22SHELLOPTS  :记录了处于状态的shell选项列表,它只是一个只读变量。

23 SHLVL   :记录了bash嵌套的层次,一般来说,我们启动第一个Shell时。  $SHLVL=1。如果在这个Shell中执行脚本,脚本中的$SHLVL=2

24TMOUT  :用来设置脚本过期的时间,比如TMOUT=3,表示该脚本3秒后过期。

25UID : 已登用户的ID

26USER :显示当前用户名字

 

       注意:使用set命令时,并非所有的默认环境变量都会显示出来,因为有些默认的环境变量时不需要赋值的。

5.5 设置PATH环境变量

       增加环境变量的方法为export PATH=$PTAH:/the/path/you/want/to/add

       有时我们可以使用PATH=$PATH:. 临时让当前目录添加到PATH变量中,可以执行当前目录的程序而不用添加./ ,不错哟。

5.6 定位系统环境变量

       Bash shell将查找下面的文件用来处理登录shell的设置:

l  /etc/profile

n  是系统上的主默认启动文件,系统上的每一个用户在登录时都将执行此启动文件,比如安装了什么软件,需要每个人都使用,那么需要将环境变量设置在该文件。

l  $HOME/.bash_profile

l  $HOME/.bash_login

l  $HOME/.profile

n  上面的3个启动文件主要特定于各个用户,这应该叫井水不犯河水。

l  $HOME/.bashrc

n  该文件为交互式shell启动时处理的。

5.7 变量数组

       可以使用

$ mytest=(one two three four five)

为某个环境变量设置多个值,但是在显示的时候,如果使用

$echo $mytest

那么只会出现one,而是用$echo ${mytest[1]},则显示two,可以使用

$echo ${mytest[*]}显示所有的值。

5.8 使用命令别名

       命名别名允许您为公共命令以及它们的参数创建别名,以尽可能减少录入工作。

比如我的alias为:

       因为我们知道,在启动新的交互式的shell时,bash shell始终会读取.bashrc启动文件,所以我们可以把别名放在该文件中。