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命令:先创建一个局部环境变量,然后再导出到全局环境中。(变量名前面不需要加$)
6.3 删除环境变量
unset命令:删除已经存在的环境变量(引用环境变量是不用$)。
用到变量时,加$;操作变量时,不用加。
和修改变量一样,在子shell中删除全局变量后,无法将效果反映到父shell中。
6.4 默认的shell环境变量
bash shell支持的Bourne变量
bash shell环境变量
6.5 设置PATH环境变量
-
当在shell命令行界面输入一个外部命令时,shell必须搜索系统来找到对应的程序。
输出中显示了有8个可供shell用来查找命令和程序。
PATH环境变量:定义了用于进行命令和程序查找的目录。
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启动文件
- 环境变量数组
网友评论