单独再介绍下环境变量还是非常有必要的,很多个性化的Linux操作环境均由这个途径实现。也算是Bash (Shell) 一节的延伸,毕竟环境变量也是shell中的变量。
概念
环境变量 ( environment variable )可以储存有关shell会话和工作环境的信息,其允许你在内存中存储数据,以便程序或shell中运行的脚本可以轻松访问到它们,分为全局变量和局部变量。
可能不是很好理解,对比数学中讲的变量,比如x和y。我们可以把它们用在N多个公式里面,而且在公式里面我们只需要写x, y,其的意义在于,比如一共10个公式,最后得出的结果可以千变万化,但是我不需要把10个公式里面的x,y都修改一遍,而是只需要修改变量的赋值而已。
所谓全局和局部是相对shell来讲的,shell有父shell和子shell之分(父与子,好理解的吧)。全局变量可以在所有级别的shell中访问使用,而局部变量则只可以在生成他的子shell中使用。
环境变量的设置和使用
环境变量还分为系统默认的环境变量(基本也就是全局环境变量,系统本来就有的)和用户自定义变量 (用户自己创建的环境变量)。系统默认的环境变量一般使用大写字母,自定义的使用小写字母,以示区分。
查看现有的环境变量可以使用命令 env 或者 printenv 或者 set (区别的话自己去查呗)。
自定义变量设置
其实就是个赋值的过程,等号左边是自定义的变量名,等号右边是变量内容,比如 var = 'It is so hot !' 。想要查看变量的值也很简单:
# 变量赋值
$ var='It is so hot !'
# 查看变量内容 (此处需要有钱,就是$符号)
$ echo $var
It is so hot !
前面说过,对于局部变量只能在创建他的shell内使用,如果想让它在所有shell里面都可以使用该怎么办呢?把局部变量"出口"一下就行了:
# 接上一个变量var,出口一下,变为全局变量
$ export var
# 生成一个子shell
$ bash
$
# 在子shell中查看局部变量的值
$ echo $var
It is so hot !
# 也是可以查看变量值的喔
默认的系统环境变量
常用的系统环境变量是很有必要了解一下的,肯定用得着。主要介绍下PATH环境变量,其定义了系统中用于进行命令和程序查找的目录。也就是说当我们在Linux系统中使用某些命令或者启动某些程序时,shell会在这个PATH变量里面从头到尾找一个遍,找到了就执行,找不到就显示 command not found。
比如说我写了一个shell脚本(可以理解成一串连续执行的命令,写在了一个文件里而已),姑且命名为scripts。这个地方需要提醒的是明确自己是在什么地方创建了这个脚本(上一篇文章里提到的我是谁,我在哪,在干啥),这对于脚本的顺利执行非常重要。假设我在我的家目录下创建了一个名为Linux的目录,然后在这个目录下写的名为 scripts 的脚本。那么执行这个脚本一方面可以用绝对路径(绝对路径,相对路径的概念自己查吧啊)执行:/Home/Linux/scripts。或者简单点用 ./scripts (但是这样做的前提是你在~/Linux目录下,慢慢体会)。
可是如果我在其他的目录下面,也想执行这个脚本呢?通过绝对路径调用当然没问题,一次两次还可以,每次都这样,好麻烦 !如上所述,我们把它添加到PATH环境变量里面不就可以了么,shell在执行脚本的时候就可以找到他了。
# 查看PATH变量内容
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin/sbin:/bin
# 把scripts脚本添加进去,也是绝对路径(绝对路径就是在任何地方都可以找到)
$ PATH=$PATH:/Home/Linux/scripts
# 看看变了没有,再echo下
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin/sbin:/bin:/Home/Linux/scripts
# 后面出现了添加的路径,成功~
如此这般操作一番就可以在任何位置调用scripts了。BUT,一旦退出或者重启系统,就又回到原来的状态了,也即这个设置不是永久性的,有办法么,当然有。
命令或者程序的永久化设置
登录shell时,它会从5个不同的文件里读取命令:
- /etc/profile
- $HOME/.bash_profile
- $HOME/.bashrc
- $HOME/.bash_login
- $HOME/.profile
/etc/profile 这个文件是shell无论如何都会访问一遍的,里面有各种各样的命令,它是系统层面的,在里面做修改的话整个系统(的用户)都会受到影响。这就意味着比较危险,操作需谨慎。
一般来说,作为用户,有专门的针对用户级别的启动文件,主要是 $HOME/.bash_profile 和 HOME/.bashrc。相当于是每个用户(可以理解成一个小家,用户张三李四都有自己的小家,每个小家具体的陈设是有一定的区别的) 都可以做一些自定义的启动文件设置。比如张三把上面提到的包含scripts脚本的PATH变量添加到了HOME/.bashrc 里面,那么张三就可以在任何位置调用scripts,而且是永久性的。虽然是在同一个系统,访问同一台主机,因为用户李四没有做相应的设置,他就没办法调用scripts。如此便实现了不同用户间的差异设置(也实现了变量,命令or程序的永久设置)。
啰嗦
这一节不知道讲清楚了没有,anyway,我觉得自己明白了···