《Linux命令行与shell脚本编程大全》学习笔记——使用Linux环境变量

使用Linux环境变量

什么是环境变量

bash shell用一个叫作环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息(这也是它们被称作环境变量的原因)。

环境变量分为两类:
	全局变量
	局部变量

全局环境变量

全局环境变量对应shell会话和所有生成的子shell都是可见的。
局部变量则只对创建它们的shell可见。

查看全局变量,可以使用env 或 printenv命令。

在这里插入图片描述

要显示个别环境变量的值,可以使用printenv命令,但是不要用env命令。

在这里插入图片描述

也可以使用echo显示变量的值。在这种情况下引用某个环境变量的时候,必须在变量前面加上一个美元符($)。
$ echo $HOME
/home/Christine
$
在echo命令中,在变量名前加上$可不仅仅是要显示变量当前的值。它能够让变量作为命令行参数。
$ ls $HOME
Desktop Downloads Music Public test.sh
Documents junk.dat Pictures Templates Videos
$
$ ls /home/Christine
Desktop Downloads Music Public test.sh
Documents junk.dat Pictures Templates Videos
$

局部环境变量

顾名思义,局部环境变量只能在定义它们的进程中可见。尽管它们是局部的,但是和全局环境变量一样重要。
事实上,Linux系统也默认定义了标准的局部环境变量。不过你也可以定义自己的局部变量,如你所想,这些变量被称为用户定义局部变量。

set命令 会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量
以及用户定义变量。
在这里插入图片描述

在这里插入图片描述

设置用户定义变量

设置局部用户定义变量

一旦启动了bash shell(或者执行一个shell脚本),就能创建在这个shell进程内可见的局部变量了。
可以通过等号给环境变量赋值,值可以是数值或字符串。

在这里插入图片描述
非常简单!现在每次引用my_variable环境变量的值,只要通过$my_variable引用即可。
如果要给变量赋一个含有空格的字符串值,必须用单引号来界定字符串的首和尾。
在这里插入图片描述
没有单引号的话,bash shell会以为下一个词是另一个要执行的命令。
注意,你定义的局部环境变量用的是小写字母,而到目前为止你所看到的系统环境变量都是大写字母。

在这里插入图片描述
如果你在子进程中设置了一个局部变量,那么一旦你退出了子进程,那个局部环境变量就不可用。
在这里插入图片描述
当我们回到父shell时,子shell中设置的局部变量就不存在了。可以通过将局部的用户定义变量变成全局变量来改变这种情况。

设置全局环境变量

创建全局环境变量的方法是先创建一个局部环境变量,然后再把它导出到全局环境中。
这个过程通过export命令来完成,变量名前面不需要加$。
在这里插入图片描述
修改子shell中全局环境变量并不会影响到父shell中该变量的值。
在这里插入图片描述

子shell甚至无法使用export命令改变父shell中全局环境变量的值。
在这里插入图片描述
尽管子shell重新定义并导出了变量my_variable,但父shell中的my_variable变量依然保留着原先的值。

删除环境变量

可以用unset命令完成这个操作。在unset命令中引用环境变量时,记住不要使用$。

在这里插入图片描述

如果要用到变量,使用$ ;如果要操作变量,不使用$。这条规则的一个例外就是使用printenv显示某个变量的值。

在子进程中删除了一个全局环境变量,这只对子进程有效。该全局环境变量在父进程中依然可用。

在这里插入图片描述

和修改变量一样,在子shell中删除全局变量后,你无法将效果反映到父shell中。

默认的shell环境变量

bash shell提供的与Unix Bourne shell兼容的环境变量。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置PATH 环境变量

PATH 环境变量定义了用于进行命令和程序查找的目录。
PATH 环境变量的内容:
在这里插入图片描述
输出中显示了有8个可供shell用来查找命令和程序。PATH中的目录使用冒号分隔。

窍门: 如果希望子shell也能找到你的程序的位置,一定要记得把修改后的PATH环境变量导出。

定义系统环境变量

在你登入Linux系统启动一个bash shell时,默认情况下bash会在几个文件中查找命令。这些文件叫作启动文件或环境文件。

bash检查的启动文件取决于你启动bash shell的方式。启动bash

shell有3种方式:
□ 登录时作为默认登录shell
□ 作为非登录shell的交互式shell
□ 作为运行脚本的非交互shell

登录shell

登录shell会从5个不同的启动文件里读取命令:
□ /etc/profile
□ $HOME/.bash_profile
□ $HOME/.bashrc
□ $HOME/.bash_login
□ $HOME/.profile

/etc/profile文件是系统上默认的bash shell的主启动文件。
系统上的每个用户登录时都会执行这个启动文件。

仔细看一下各个文件。

/etc/profile文件
/etc/profile文件是bash shell默认的的主启动文件。只要你登录了Linux系统,bash就会执行/etc/profile启动文件中的命令。

$HOME目录下的启动文件

剩下的启动文件都起着同一个作用:提供一个用户专属的启动文件来定义该用户所用到的环境变量。

大多数Linux发行版只用这四个启动文件中的一到两个:
□ $HOME/.bash_profile
□ $HOME/.bashrc
□ $HOME/.bash_login
□ $HOME/.profile

注意,这四个文件都以点号开头,这说明它们是隐藏文件(不会在通常的ls命令输出列表中出现)。它们位于用户的HOME目录下,所以每个用户都可以编辑这些文件并添加自己的环境变量,这些环境变量会在每次启动bash shell会话时生效。

窍门: 记住,$HOME表示的是某个用户的主目录。它和波浪号(~)的作用一样。

交互式shell进程

如果你的bash shell不是登录系统时启动的(比如是在命令行提示符下敲入bash时启动),那么你启动的shell叫作交互式shell。

交互式shell不会像登录shell一样运行,但它依然提供了命令行提示符来输入命令。
例:
在这里插入图片描述

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

非交互式shell

最后一种shell是非交互式shell。
系统执行shell脚本时用的就是这种shell。不同的地方在于它没有命令行提示符。
但是当你在系统上运行脚本时,也许希望能够运行一些特定启动的命令。



bash shell提供了BASH_ENV环境变量。
当shell启一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件。
如果有指定的文件,shell会执行该文件里的命令,这通常包括shell脚本变量设置。

环境变量持久化

存储个人用户永久性bash shell变量的地方是  /$HOME/.bashrc文件。
这一点适用于所有类型的shell进程。

但如果设置了BASH_ENV变量,那么记住,除非它指向的是$HOME/.bashrc,
否则你应该将非交互式shell的用户变量放在别的地方。

可以把自己的alias设置放在$HOME/.bashrc启动文件中,使其效果永久化。

数组变量

环境变量有一个很酷的特性就是,它们可作为数组使用。
数组是能够存储多个值的变量。
这些值可以单独引用,也可以作为整个数组来引用。

要给某个环境变量设置多个值,可以把值放在括号里,值与值之间用空格分隔。

$ mytest=(one two three four five)
$

在这里插入图片描述
在这里插入图片描述

要引用一个单独的数组元素,就必须用代表它在数组中位置的数值索引值。索引值要用方括号括起来。
要显示整个数组变量,可用星号作为通配符放在索引值的位置。

在这里插入图片描述

也可以改变某个索引值位置的值。

$ mytest[2]=seven
$
$ echo ${mytest[*]}
one two seven four five
$



甚至能用unset命令删除数组中的某个值,但是要小心,这可能会有点复杂。看下面的例子。
$ unset mytest[2]
$
$ echo ${mytest[*]}
one two four five
$
$ echo ${mytest[2]}
$echo ${mytest[3]}
four
$

用unset命令删除在索引值为2的位置上的值。
显示整个数组时,看起来像是索引里面已经没这个索引了。
但当专门显示索引值为2的位置上的值时,就能看到这个位置是空的。
可以在unset命令后跟上数组名来删除整个数组。

小结

Linux系统使用全局环境变量和局部环境变量存储系统环境信息。

PATH环境变量定义了bash shell在查找可执行命令时的搜索目录。

可以修改PATH环境变量来添加自己的搜索目录(甚至是当前目录符号),以方便程序的运行。
也可创建自用的全局和局部环境变量。

bash shell会在启动时执行几个启动文件。
这些启动文件包含了环境变量的定义,可用于为每个bash会话设置标准环境变量。

每次登录Linux系统,bash shell都会访问/etc/profile启动文件以及3个针对每个用户的本地启动文件:
$HOME/.bash _profile、$HOME/.bash_login和$HOME/.profile。
用户可以在这些文件中定制自己想要的环境变量和启动脚本。

可以通过指定索引值来访问其中的单个值,或是通过环境变量数组名来引用所有的值。

学习参考资料:

《Linux命令行与shell脚本编程大全》第3版
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值