第5章 Linux环境变量

第5章 Linux环境变量

5.1 什么是环境变量

环境变量(environment variable)这项特性允许你在内存中存储数据,以便程 序或shell中运行的脚本能够轻松访问到它们

​ Linux系统默认定义了一些标准的全局环境变量和局部环境变量

​ 在bash shell中,环境变量分为两类:

  • 全局变量
  • 局部变量

5.1.1 全局环境变量

​ 全局环境变量对于shell会话和所有生成的子shell都是可见的,这对那些所创建的子shell需要获取父shell信息的程序来说非常有用

printenv [变量名]    //查看全局变量配置或个别环境变量的值
echo [$变量名]    //显示变量的值,美元符($)不能省略

窍门 在变量名前加上美元符($)能够让变量作为命令行参数
例如:变量HOME的值为/home/Christine
命令行输入'ls $HOME'和输入'ls /home/Christine'的输出结果是一样的

5.1.2 局部环境变量

​ 局部环境变量只能在定义它们的进程中可见,但它和全局变量一样重要

​ 查看局部环境变量的列表有点复杂。遗憾的是,在Linux系统并没有一个只显示局部环境变量的命令

set    //显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量
说明 命令env、printenv和set之间的差异很细微。set命令会显示出全局变量、局部变量以及用户定义变量,还会按照字母顺序对结果进行排序
5.2 设置用户定义变量

5.2.1 设置局部用户定义变量

​ 可以通过等号给环境变量赋值,值可以是数值或字符串。如果要给变量赋一个含有空格的字符串值,必须用双引号来界定字符串的首和尾

​ 记住,变量名、等号和值之间没有空格!!

[root@localhost ~]# echo $my_variable

[root@localhost ~]# my_variable="Hello World"
[root@localhost ~]# echo $my_variable
Hello World
窍门 所有的环境变量名均使用大写字母,这是bash shell的标准惯例。在涉及用户定义的局部变量时应坚持使用小写字母。变量名区分大小写

​ 用户创建的局部变量只能在当前shell使用,在父shell或子shell中都不可用

5.2.2 设置全局环境变量

​ 创建全局环境变量的方法是先创建一个局部环境变量,然后再把它导出到全局环境中。这个过程通过export命令来完成,变量名前面不需要加 $

​ 在设置全局环境变量时需注意两点:

  1. 修改子shell中全局环境变量并不会影响到父shell中该变量的值
  2. 子shell无法使用export命令改变父shell中全局环境变量的值
[root@localhost ~]# my_variable="I'm Global now" //定义变量
[root@localhost ~]# export my_variable //导出到全局环境
[root@localhost ~]# echo $my_variable
I'm Global now
[root@localhost ~]# bash //创建子shell
[root@localhost ~]# echo $my_variable
I'm Global now
[root@localhost ~]# my_variable="Null" //重新定义变量值
[root@localhost ~]# export my_variable
[root@localhost ~]# echo $my_variable
Null
[root@localhost ~]# exit
exit
[root@localhost ~]# echo $my_variable
I'm Global now

​ 从以上事例可以看到尽管子shell重新定义并导出了变量my_variable,但父shell中的my_variable变量依然保留着原先的值

5.3 删除环境变量

​ 可以用unset命令删除环境变量,在unset命令中引用环境变量时不使用$

​ 如果是在子进程中删除了一个全局环境变量,这只对子进程有效。该全局环境变量在父进程中依然可用(和在子shell中修改环境变量类似,无法将效果反映到父shell中)

[root@localhost ~]# echo $my_variable
I'm Global now
[root@localhost ~]# unset my_variable
[root@localhost ~]# echo $my_variable

5.4 设置 PATH 环境变量

​ 将目录加到PATH环境变量之后,就可以在虚拟目录结构中的任何位置执行程序(如果希望子shell也能找到你的程序的位置,一定要记得把修改后的PATH环境变量导出)

​ 不过这种修改是暂时的,要想让环境变量效果持久化,可以把修改设置放在 $HOME/.bashrc启动文件中

[root@localhost ~]# test.txt
bash: test.txt: 未找到命令...
[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
[root@localhost ~]# PATH=$PATH:/home/test
[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin:/home/test
[root@localhost ~]# test.txt
this is a test
5.5 定位系统环境变量

​ 在登录Linux系统启动一个bash shell时,默认情况下bash会在几个文件中查找命令。这些文件叫作启动文件环境文件。bash检查的启动文件取决于你启动 bash shell的方式(有3种):

  • 登录时作为默认登录shell
  • 作为非登录shell的交互式shell
  • 作为运行脚本的非交互shell

5.5.1 登录shell

​ 登录shell会从5个不同的启动文件里读取命令:

  • /etc/profile //是系统上默认的bash shell的主启动文件,系统上每个用户登录时都会执行该文件
  • $HOME/.bash_profile
  • $HOME/.bashrc //该文件通常通过其他文件运行的
  • $HOME/.bash_login
  • $HOME/.profile
窍门 $HOME表示的是某个用户的主目录。它和波浪号(~)的作用一样
说明 要留意有些Linux发行版使用了
可拆卸式认证模块(Pluggable Authentication Modules, PAM)。在这种情况下,PAM文件会在bash shell启动之前处理,这些文件中可能会包含环境变量。PAM文件包括/etc/environment文件和$HOME/.pam_environment文件

5.5.2 交互式shell进程

​ 如果你的bash shell不是登录系统时启动的(比如是在命令行提示符下敲入 bash时启动),那么你启动的shell叫作交互式shell。它就不会访问/etc/profile文 件,只会检查用户HOME目录中的.bashrc文件

.bashrc文件有两个作用:一是查看/etc目录下通用的bashrc文件,二是为用户提供一个定制自己的命令别名和私有脚本函数的地方

5.5.3 非交互式shell

​ 系统执行shell脚本时用的就是这种shell。不同的地方在于它没有命令行提示符,但是当你在系统上运行脚本时,也许希望能够运行一些特定启动的命令。为了处理这种情况,bash shell提供了BASH_ENV环境变量

5.6 数组变量

​ 环境变量有一个很酷的特性就是,它们可以作为数组使用,值与值之间用空格分隔

[root@localhost ~]# mytest=(one two three four five)
[root@localhost ~]# echo $mytest
one
[root@localhost ~]# echo ${mytest[2]}
three
[root@localhost ~]# mytest[2]=seven
[root@localhost ~]# echo ${mytest[*]}
one two seven four five
[root@localhost ~]# unset mytest[2]
[root@localhost ~]# echo ${mytest[*]}
one two four five
[root@localhost ~]# echo ${mytest[2]} //删除的是值,但位置还在

[root@localhost ~]# echo ${mytest[3]}
four
5.7 小结

​ 本章介绍了Linux的环境变量,在工作过程中建议还是边查阅资料边操作。

本章节涉及命令:env、printenv、set、echo、export、unset
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值