前言
CentOS的环境变量配置文件体系是一个层级体系,这与其他多用户应用系统配置文件是类似的,有全局的,有用户的,有shell的,另外不同层级有时类似继承关系。
本文将详细介绍关于CentOS环境变量与配置文件的相关内容,下面话不多说了,来一起看看详细的介绍吧
什么是环境变量
bash shell用一个叫做 环境变量(environment variable) 的特性来存储有关shell会话和工作环境的信息。即允许在内存中存储数据,使得在程序或shell中运行的脚本能够访问它们。
在bash shell中,环境变量分为两类:
全局变量 局部变量全局环境变量
全局环境变量对于shell会话和所有生成的子shell都是可见的。局部变量则只对创建它们的shell可见。
查看全局变量,可以使用env或printenv命令。
| [root@dev ~]# env HOSTNAME=localhost TERM=linux SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=10.0.100.17 56344 22 SSH_TTY=/dev/pts/0 USER=root [root@dev ~]# [root@dev ~]# printenv HOSTNAME=localhost TERM=linux SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=10.0.100.17 56344 22 SSH_TTY=/dev/pts/0 USER=root [root@dev ~]# printenv TERM linux |
使用环境变量,通过 $ +变量名。
| [root@dev ~]# echo $HOME /root |
系统环境变量基本上都是使用大写字母,以区别于普通用户的环境变量。
局部环境变量
顾名思义,局部环境变量只能在定义它们的进程中可见。set命令会显示某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量。
| [root@dev ~]# set BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu") BASH_VERSION='4.1.2(1)-release' COLORS=/etc/DIR_COLORS COLUMNS=165 |
用户定义变量
一旦启动了bash shell,就能创建在这个shell进程内可见的局部变量。该进程创建的子shell无法读取父shell的局部变量。
| [root@dev shell]# sh a.sh 2 22 2 [root@dev shell]# cat a.sh #!/bin/bash a=1; export b=2; sh b.sh echo $b; [root@dev shell]# cat b.sh #!/bin/bash echo $a; echo $b; b=22; echo $b; [root@dev shell]# sh a.sh 2 22 2 |
用户可以通过export变量,使变量变为全局变量,这样子shell也可以读取到。而子shell修改该变量,父shell中不受影响。
如果在子shell中设置环境变量,想要在父shell中读取呢?
一个使用场景是:多个执行脚本依赖于共同的环境配置,这个配置写在一个env.sh脚本里,如何使其他执行脚本可以读取到env.sh里变量?在子shell中export变量,并不能影响到父shell。








