提示:
在Shell中,环境变量分为两种。一种是用户自定义的环境变量,另一种是系统自带的环境变量。
而在系统自带的环境变量中,PATH环境变量、PS1环境变量、LANG语系变量需要进行说明一下。
本篇文章主要说明用户自定义的环境变量,和PATH环境变量。
使用export
关键字声明的变量就是环境变量。
格式:
[root@localhost ~]# export AGE="18"
也可以先定义一个自定义变量,然后把自定义变量声明称环境变量。如下:
[root@localhost ~]# AGE=18 [root@localhost ~]# export AGE
注:
环境变量名称一般要用大写。
环境变量的作用域,在父子Shell中都可查看。
env
命令和set
命令的区别是,set命令可以查看所有变量,而env
命令只能查看环境变量。(具体看上一篇文章)
这里说明一下env
命令和set
命令所查看的一些重要的内容,以后就不详细说明了。
(1)env
命令
(2)set
命令
env
命令可以查询到所有的环境变量,但是还有一些变量是env
命令查看不到的,这些变量虽然不是环境变量,却是和Bash操作接口相关的变量,这些变量也对我们的Bash操作终端起到了重要的作用。这些变量就只能用set
命令来查看了,只列出重要的内容,如下:
和用户定义变量一样,用unset
命令删除变量。
#删除环境变量 gender [root@localhost ~]# unset gender
系统自带的环境变量的名称和作用都不能够改变。
系统的环境变量,用上边介绍的env
命令和set
命令都可以查出。我们接下来说明几个比较重点的环境变量。
查看当前系统PATH环境变量的值:
[root@localhost ~ ] # echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
每次执行env
命令和set
命令都要在好多变量中找我们需要查看的变量很麻烦,可以使用上面的方式直接查看我们所需的变量的值。
PATH变量的作用:系统查找命令的路径。
你回想一下,在说明Shell执行脚本运行的时候说过,有两种方法可以执行Shell脚本,一个是通过绝对路径或者相对路径执行脚本,如:/root/hello.sh
或者./hello.sh
。还有一种方法是直接执行bash命令执行脚本,如:bash hello.sh
。我们当时建议用第一种方式。(在Linux系统中,所有的执行文件,都应该使用绝对路径来执行它)
但是我们有没有发现,比如我们之前所执行过的一些系统命令,如ls
命令,我们知道ls
命令在系统的bin目录下。如下图:
但是我们直接执行ls
命令,并没有使用绝对路径,系统就能够执行ls
命令,这是为什么呢?
根本原因就是在这个PATH环境变量中。
PATH环境变量中配置的这些路径,就是系统查找命令的路径。也就是说当我们输入了一个程序名,如果没有写命令的路径,系统就会到PATH环境变量定义的路径中去寻找,是否有可以执行的程序。从左到右一个一个目录查找你所要执行的命令,找到了就直接执行,而如果把所有的目录都搜索完了,也没有找到你所执行的命令,就会报错,提示你-bash:变量名:command not found(命令没找到)
。换句话说也就是你这个命令执行的不正确,也或者说你所执行的命令,并没有配置在PATH环境变量中。
注意:PATH环境变量的值中,是用“:”分割的路径。
我们如何才能让一个自定义的程序或者脚本,不用输入绝对路径就能够执行呢?
有两种方式:
#拷贝hello.sh文件到bin目录下 [root@localhost ~]# cp /root/sh/hello.sh /bin/ #hello.sh脚本即可以直接执行 [root@localhost ~]# hello.sh Perhaps only heart no holdings, to being on land, settle. 也许只有心无所持,才能随遇而安。
#在变量PATH的后面,加入/root/sh目录 [root@localhost ~]# PATH="$PATH":/root/sh #查询PATH的值,变量叠加生效了 [root@localhost ~]# echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/sh
注意的是,我们这样定义的PATH环境变量只是临时生效,一旦重启或注销就会消失,如果想要永久生效,需要写入环境变量配置文件
/etc/profile
中。(可查看后续文章)