第6章 使用Linux环境变量

6.1 什么是环境变量

环境变量(environment variable):储存有关shell会话和工作环境的信息。
分为两类:

  • 全局变量(对于shell会话和所有生成的子shell都是可见的)
  • 局部变量(仅对创建它们的shell可见)

6.1.1 全局环境变量

系统环境变量:大写字母
普通用户的环境变量:小写字母
查看全局变量:env命令 或 printenv命令(显示个别环境变量的值)


echo命令也可显示变量的值,需在变量前加上$符号,同时也能够让变量作为命令行参数。

全局环境变量可用于进程的所有子shell,若用bash生成一个子shell,显示HOME环境变量的当前值,这个值和父shell中一模一样。

6.1.2 局部环境变量

局部环境变量只能在定义它们的进程中可见。目前无一个只显示局部环境变量的命令。
set命令:显示某个特定进程设置的所有环境变量,包括局部变量、全局变量和用户自定义变量

6.2 设置用户定义变量

6.2.1 设置局部用户定义变量

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


如果要给变量赋值一个含有空格的字符串值,必须用单引号来界定字符串的首和尾。

记住!变量名、等号和值之间没有空格!
设置了局部环境变量后,就能在shell进程任何地方使用它,但如果生成了另外一个shell,它在那个shell里不可用。

如果你在子进程中设置了一个局部变量,一旦退出了子进程,那个局部环境变量就不可用了。

6.2.2 设置全局环境变量

创建全局环境变量的方法是export命令:先创建一个局部环境变量,然后再导出到全局环境中。(变量名前面不需要加$)

修改子shell中全局环境变量并不会影响到父shell中该变量的值。

子shell无法使用export命令改变父shell中全局环境变量的值。

6.3 删除环境变量

unset命令:删除已经存在的环境变量(引用环境变量是不用$)。

用到变量时,加$;操作变量时,不用加。

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

6.4 默认的shell环境变量

bash shell支持的Bourne变量
bash shell环境变量

6.5 设置PATH环境变量

  • 当在shell命令行界面输入一个外部命令时,shell必须搜索系统来找到对应的程序。
    PATH环境变量:定义了用于进行命令和程序查找的目录。

    输出中显示了有8个可供shell用来查找命令和程序。
    PATH中的目录使用冒号:分隔

  • 如果命令或者程序位置没用包括在PATH变量中,不使用绝对路径的话,shell没法找到,就会有如下输出:
  • ?问题:应用程序放置可执行文件的目录常不在PATH环境变量所包含的目录中。
    解决思路:保证PATH环境变量包含了所有存放应用程序的目录。
    解决方法:把新的搜索目录添加到现有的PATH环境变量中,无需从头定义。

$ echo $PATH
$ PATH=$PATH:/home/hannah/Scripts
$ echo $PATH
or
$ PATH=$PATH:. #单点符代表当前目录

把目录加到PATH环境变量后,就可以在虚拟目录结构中任何位置执行程序。但对PATH 变量的修改只能持续到退出或者重启系统,不能一致持续。

6.6 定位系统环境变量

启动bash shell有3种方式:

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

6.6.1 登陆shell

当登录Linux系统时,bash shell会作为登录shell启动。
登录shell会从5个不同的启动文件里读取命令:

  • /etc/profile(主启动文件)
  • $HOME目录下的启动文件:
$HOME/.bash_profile;$HOME/.bashrc;$HOME/.bash_login;$HOME/.profile

6.6.2 交互式shell进程

如果bash shell不是登录系统时启动,而是敲bash时启动,那么叫交互式shell。它不会访问/etc/profile,只会检查用户HOME目录的.bashrc文件。

6.6.3 非交互式shell

系统执行shell脚本时用的就是这种shell,不同地方在于没有命令行提示符。

6.6.4 环境变量持久化

在/etc/profile.d目录中创建一个以.sh结尾的文件,把所有新的或修改过的全局环境变量设置放在这个文件中。
在大多数发行版中,储存个人用户永久性bash shell 变量的地方是$HOME/.bashrc文件。
(可以把自己的alias设置放在$HOME/.bashrc文件中,使其效果永久化)

6.7 数组变量

环境变量可以作为数组使用。
数组:储存多个值的变量。
要给某个环境变量设置多个值,可以放在括号里,值与值之间空格分隔。



6.8 小结

  • 全局环境变量和局部环境变量
  • PATH环境变量
  • bash shell启动文件
  • 环境变量数组

你可能感兴趣的:(第6章 使用Linux环境变量)