Linux环境变量

Posted on Aug 21, 2014
Linux环境变量

1.什么是环境变量(Environment variable)

在Linux shell中定义的变量基本分成两类:本地变量和环境变量(Environment variable), 两者最大的不同之处在于环境变量为全局变量可被子shell继承而本地变量只在当前shell有效, 用export命令即可将本地变量转化成环境变量, Linux中用env或export命令可以查看环境变量, 用declare或set可以查看所有变量(包括一般变量和环境变量).

环境变量设置命令

# 展示变量
set # 查看所有shell变量即本地变量和环境变量
env # 查看所有的环境变量(看到的结果与export相同, 因为环境变量都由export生成)

# 设置一个变量
VAR=12

# 设置只读变量, 设置后变量将不可以删除或修改
readonly VAR=12

# 将本地变量设置为环境变量
export VAR

# 在不加参数的情况下为查看使用export命令生成的所有环境变量
export

# 查看变量值
echo $VAR

# 删除变量
unset VAR

2. 环境变量和环境变量配置文件

环境变量配置文件主要分为两种: login shell配置文件以及non-login shell配置文件, 字面上看也就是登录shell与不登录shell, 登录shell好理解就是你从字符终端界面输入帐户密码登录登录成功后那就叫login shell, non-longin shell有一个很好的例子:gnome-terminal在图形界面GNOME环境下的字符终端界面, 用过图形界面就知道打开的时候是不需要输入帐户密码登录的, 打开直接可以用, 此外在已经登录的shell中输入sh或bash可以打开一个新的shell(称为子shell)这些子shell都是non-login shell, 这下可以理解了吧^_^. 它们物理上的区别在于读取的配置文件不同, 具体不同如下所示:

Non-longin Shell (系统开机后执行)

/etc/bashrc 这个文件主要调用了 /etc/profile*/etc/profile.d/*

Login Shell(用户登录后执行)

用户登录后执行两个文件: /etc/profile~/.bash_profile(如果有~/.bash_login或者~/.profile可能因发行版不同而有所不同)而non-login shell不会执行这两个文件

/etc/profile 此文件里调用了一些文件

  • /etc/profile.d/*.sh
  • /etc/inputrc(此文件保存了热键环境变量, CentOS 6.x版本好像没在profile文件里调用, 有时间再确认一下)

~/.bash_profile文件调用关系如下

  • ~/.bashrc –> /etc/bashrc(这个文件就调用了这么一个)
  • ~/.bash_profile –> ~/.bashrc
  • ~/.bashrc –> /etc/bashrc

用户应该将自己的环境变量保存在~/.bash_profile中当用户登录时环境变量则执行当系统打开后会自动执行/etc/bashrc官方描述中表示此文件中主要包含了Functions and aliases而对/etc/profile的描述为:System wide environment and startup programs, for login setup意思大概是此文件描述一个广泛的环境, 这些环境在登录的时候设置, 主要用来启动程序

shell执行的几种方式, 事实上shell执行的时候与环境变量息息相关, 前文中提到的配置文件都是shell程序所以可以用source(或.)执行, source执行shell所产生的变量将在当前shell有效(export执行后其子shell也有效)除了source之外还有几种常用的执行方式:

  • 当一个shell程序有运行权限是按路径运行或者PATH环境变量设置后可以直接运行, 这种方式是在子shell中运行比如运行当前目录下的shell程序./shell_program
  • sh shell_program:以sh的方式打开一个新shell执行一个shell_program, 这种方式与上一种执行的结果类似, 不同之处在于不需要有执行权限

3. 设置Shell变量的注意事项(参考《鸟哥的LINUX私房菜-第三版》)

  • 变量名必须是数字和英文字母且起始字符不能是数字
  • =两边不可以使用空格
  • 两种赋值方式(推荐用后者):
    • name="$name"yes
    • name=${name}yes

4. 最后

对于初学者来说Linux环境变量实用易懂, 关于Linux基础知识的学习笔者大部分都来自《鸟哥的Linux私房菜》以及系统帮助文档, 进一步熟悉Linux使用推荐《鸟哥的Linux私房菜》.