关注本公众号,一天一个知识点,持续精进!
碎片时间|体系学习
今天是
2018年的第165天
第139篇原创
00、什么是环境变量?
通过前两篇文章我们一起总结了Linux常用命令,今天我们一起来认识环境变量。Linux的Shell脚本正是通过环境变量获取系统信息、存储临时数据和配置信息。
简言之,shell是程序,环境变量就是数据。在bash shell中,环境变量分为以下两类:
全局变量
局部变量
下面,我们将分别对上述两种类型的环境变量的用法进行说明。
01、全局变量
(1)如何定义?
格式:
$ temp='Hello world!'
$ export temp
$ echo $temp
说明:
通过等号(=)给环境变量进行赋值;
在定义环境变量时,变量名称、等号、变量值之间没有空格;如果在赋值表达式中放置了空格,bash shell会把值当成一个单独的命令;
如果要给变量赋值一个包含空格的字符串,必须用单引号来界定字符串的开始和结尾;没有单引号的话,bash shell会以为下个字符串是另外一个要执行的命令;
通过export命令将变量导出到全局环境中;注意,在导出环境变量的时候,不能用$去引用变量,直接采用变量名即可;
通过echo命令可查看环境变量值;注意,在查看环境变量的时候,需要用$去引用变量;
一般地,系统环境变量都用大写字母,自定义的环境变量采用小写字母。
(2)作用域
定义后的全局变量在设定该全局环境变量的进程创建的所有子进程中都是可见的。
如果是独立于创建变量所在进程的shell,先前创建的变量不会在该shell中生效。
(3)删除全局变量
格式:
$ unset temp
说明:
可采用unset命令来删除环境变量。但是,对于全局变量而言,如果你是在子进程中删除了一个全局环境变量,它只是在子进程中删除了该全局变量;在其父进程中该全局环境变量任然有效。
在unset命令中删除环境变量的时候,不能用$去引用变量,直接采用变量名即可。
02、局部变量
(1)如何定义?
格式:
$ temp='Hello world!'
$ echo $temp
说明:
基本情况与定义全局变量相同;只是不需要额外执行export命令。
(2)作用域
定义后的局部变量只是在设定该局部环境变量的进程中可见;在其子进程中是不可见的。
(3)删除局部变量
格式:
$ unset temp
说明:
一旦执行删除局部变量命令后,所有进程、子进程对该变量均不可见。
03、常见的Shell环境变量
每次登录Linux系统,bash shell都会首先访问/etc/profile启动文件,然后访问3个针对每个用户的本地启动文件: $HOME/.bash_profile、 $HOME/.bash_login、 $HOME/.profile;用户在这些文件中定制自己想要的环境变量和启动脚本。
默认的shell环境变量很多,我们就谈谈PATH环境变量,因为这个变量足够常见、足够重要。
上图是我本人Linux系统下典型的PATH环境变量内容。该环境变量的特点如下:
PATH中的每个目录都由冒号(:)分隔;
PATH变量末尾也不需要有任何符号来指示结束;
PATH变量里面定义的目录先后顺序也指示了shell查找命令的顺序;如果可执行程序所在的目录路径一旦设置在PATH中,我们就可以在任何虚拟目录的任何位置执行该可执行程序
此外,除了通过设置PATH变量可以非常方便调用命令或程序外,还可以通过alias命令使用命令别名。所谓命名别名就是允许为通用命令(和它们的参数一起)创建一个别名,这样就可以直接通过输入别名就可启动相应的命令了。如:
格式:
$ alias list='ls -al'
$ list
说明:
通过alias命令可以为一个完整的“命令+参数”取一个别名;
可在虚拟目录下任何位置,通过别名调用命令;
在作用域方面,命令别名的行为和局部变量是一致的,他们通常只在定义它们的shell进程中有效;为此,我们一般都将别名定义在$HOME/.bashrc的启动文件中。
04、小结
综上,今天我们对shell环境变量的类型、定义与使用方法、作用域、注意事项等内容进行了介绍;最后对常用且重要的PATH环境变量进行了说明。下一篇我们将对Linux文件权限进行介绍,进一步为后续的shell编程实战奠定基础,敬请期待。
领取专属 10元无门槛券
私享最新 技术干货