使用Linux环境变量
什么是环境变量
bash shell使用一种称为环境变量的特性来存储关于shell会话和工作环境的信息(环境变量的名称由此而来)。该特性还允许你将数据存储在内存中,以便于在shell中运行的程序和脚本访问它们。这是一种便捷的、用于存储持久性数据的方式,这些数据可以标示用户账户、系统、shell或任何需要存储的内容的特性。
bash shell中共有两种类型的环境变量:
- 全局变量;
- 本地变量;
全局环境变量
要查看全局变量,可以使用printenv命令。
通过该命令的输出,我们可以看到bash shell已经设置了许多全局环境变量,其中大多数由系统在登录过程中设置。
本地环境变量
本地环境变量只在定义它们的本地进程中可见。可以通过set命令显示特定进程的所有环境变量集。这其中包含了全局环境变量和本地环境变量。
设置环境变量
设置本地环境变量
为环境变量分配一个数值或者字符串,方法是使用等号将变量指定为具体值。
例如
1 | $ test=hello, |
那么我们使用
1 | echo $test |
就可以输出hello。
当然如果赋值为一个字符串,需要用单引号括起来,否则空格后的字符会被认为是命令而出错。
如果创建新环境变量,建议(但不要求)使用小写字母。这用助于区分个人环境变量与系统环境变量。
设置全局环境变量
创建全局变量的方法是创建一个本地环境变量,然后使用export将它导出到全局环境中。
移除环境变量
可以使用unset命令来移除环境变量,在unset命令中引用环境变量时,不要使用美元符号。
默认的shell环境变量
- BASH :记录当前bash shell的路径。
1 | [root@localhost awK]# echo $BASH |
- BASH_SUBSHELL :记录当前子shell的层次。BASH_SUBSHELL是从0开始计数的整数。
- BASH_VERSINFO :是一个数组包含六个元素,这六个元素显示bash的版本信息。
- BASH_VERSION :显示shell版本的信息。
- DIRSTACK :记录了栈顶的目录值,初值为空。
- GLOBLGNORE :是由冒号分割的模式列表,表示通配时忽略的文件名集合。
- GROUPS :记录当前用户所属的组。
- HOME :记录当前用户的家目录,由/etc/passwd的倒数第二个域决定。
- HOSTNAME :记录主机名。
- HOSTTYPE和MACHTYPE :都是记录系统的硬件架构。
- IFS :用于设置指定shell域分隔符,默认情况下为空格。
1 | [rootIFS=: awK]# export |
- OLDPWD :记录旧的工作目录。
- OSTYPE :记录操作系统类型。
- PATH :环境变量,显示当前PATH环境变量的内容。
- PPID :是创建当前进程的进程号,即当前进程的父进程号
- PS1 :提示符变量,用于设置提示符格式,用于设置一级shell提示符环境变量。
- PS2 :用于设置二级shell提示符环境变量。
- PWD :记录当前路径
- REPLY :REPLY变量与read和select有关。
- SECONDS:记录脚本从开始到结束耗费的时间。
- SHELL :显示当前所用的shell
- SHELLOPTS :记录了处于“开”状态的shell选项列表,它只是一个只读变量。
- SHLVL :记录了bash嵌套的层次,一般来说,我们启动第一个Shell时。 $SHLVL=1。如果在这个Shell中执行脚本,脚本中的$SHLVL=2 。
- TMOUT :用来设置脚本过期的时间,比如TMOUT=3,表示该脚本3秒后过期。
- UID : 已登用户的ID
- USER :显示当前用户名字
注意:使用set命令时,并非所有的默认环境变量都会显示出来,因为有些默认的环境变量时不需要赋值的。
设置PATH环境变量
增加环境变量的方法为export PATH=$PTAH:/the/path/you/want/to/add;
有时我们可以使用PATH=$PATH:. 临时让当前目录添加到PATH变量中,可以执行当前目录的程序而不用添加./。 ,不错哟。
定位系统环境变量
Bash shell将查找下面的文件用来处理登录shell的设置:
- /etc/profile : 是系统上的主默认启动文件,系统上的每一个用户在登录时都将执行此启动文件,比如安装了什么软件,需要每个人都使用,那么需要将环境变量设置在该文件。
- $HOME/.bash_profile
- $HOME/.bash_login
- $HOME/.profile 上面的3个启动文件主要特定于各个用户,这应该叫井水不犯河水。
- $HOME/.bashrc 该文件为交互式shell启动时处理的。
变量数组
可以使用
1 | $ mytest=(one two three four five) |
为某个环境变量设置多个值,但是在显示的时候,如果使用
1 | echo $mytest |
那么只会出现one,而是用$echo ${mytest[1]},则显示two,可以使用 $echo ${mytest[*]}显示所有的值。
使用命令别名
命名别名允许您为公共命令以及它们的参数创建别名,以尽可能减少录入工作。
因为我们知道,在启动新的交互式的shell时,bash shell始终会读取.bashrc启动文件,所以我们可以把别名放在该文件中。