定位系统环境变量

bash shell 会作为登录shell,启动登录shell会从5个不同的登录文件中读取命令
/etc/profile 默认的主启动文件
$HOME/.bash_profile
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile

有些的linux发行版中采用可拆卸式论证模块 PAM(Pluggable Authentication module)
PAM会在bash shell之前处理 PAM文件包括/etc/environment $HOME/.pam_environment

另外4个文件是针对用户的
1    /etc/profile 是bash shell默认的主启动文件, 只要你登录linux ,bash shell就会执行/etc/profile文件中的命令

2 $HOME/.bash_profile
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile这4w个提供一个用户专属的启动文件来定义该用户所用到的环
境变量。大多数Linux发行版只用这四个启动文件中的一到两个


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

shell会按照按照下列顺序,运行第一个被找到的文件,余下的则被忽略:
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile
注意,这个列表中并没有$HOME/.bashrc文件。这是因为该文件通常通过其他文件运行的。


交互式 shell 进程
你的shell不是在登录中启动,那么你启动的shell叫做交互式shell
做为交互式shell是不会启动/etc/profile.
bashrc文件有两个作用:一是查看/etc目录下通用的bashrc文件,二是为用户提供一个定制自
己的命令别名(参见第5章)和私有脚本函数(将在第17章中讲到)的地方。

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


为了处理这种情况, bash shell提供了BASH_ENV环境变量。当shell启动一个非交互式shell进
程时,它会检查这个环境变量来查看要执行的启动文件。如果有指定的文件, shell会执行该文件
里的命令,这通常包括shell脚本变量设置。
在本书所用的CentOS Linux发行版中,这个环境变量在默认情况下并未设置。如果变量未设
置, printenv命令只会返回CLI提示符:

在本书所用的Ubuntu发行版中,变量BASH_ENV也没有被设置。 记住, 如果变量未设置, echo
命令会显示一个空行,然后返回CLI提示符:

那如果BASH_ENV变量没有设置, shell脚本到哪里去获得它们的环境变量呢?别忘了有些
shell脚本是通过启动一个子shell来执行的(参见第5章)。子shell可以继承父shell导出过的变量。
举例来说,如果父shell是登录shell,在/etc/profile、 /etc/profile.d/*.sh和$HOME/.bashrc文件中
设置并导出了变量,用于执行脚本的子shell就能够继承这些变量。
要记住,由父shell设置但并未导出的变量都是局部变量。子shell无法继承局部变量。


对于那些不启动子shell的脚本,变量已经存在于当前shell中了。所以就算没有设置
BASH_ENV,也可以使用当前shell的局部变量和全局变量。


对全局环境变量来说(Linux系统中所有用户都需要使用的变量),可能更倾向于将新的或修
改过的变量设置放在/etc/profile文件中,但这可不是什么好主意。如果你升级了所用的发行版,
这个文件也会跟着更新,那你所有定制过的变量设置可就都没有了。
最好是在/etc/profile.d目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变
量设置放在这个文件中

在交互式shell中使用source执行全局环境变量

在大多数发行版中,存储个人用户永久性bash shell变量的地方是$HOME/.bashrc文件。这一
点适用于所有类型的shell进程。但如果设置了BASH_ENV变量,那么记住,除非它指向的是
$HOME/.bashrc,否则你应该将非交互式shell的用户变量放在别的地方。

alias命令设置就是不能持久的。你可以把自己的alias设置放在
$HOME/.bashrc启动文件中,使其效果永久化。

环境变量有一个很酷的特性就是,它们可作为数组使用。数组是能够存储多个值的变量。这
些值可以单独引用,也可以作为整个数组来引用
Mytest=(one  two  three)
  2.echo $Mytest 等于第一个参数相当于 a[0]
 3 echo ${Mytest[1]}等于第二个参数 相当于 a[1]
4用*显示整个数组 echo ${Mytest[*]}
通过索引位置改变值 Mytest[2]=”wang”;

unset命令删除数组中的某个值
删除整个数组unset Mytest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值