Linux Command Line and....ch6(使用linux环境变量)
本章主要内容:
- 环境变量
- 创建自己的局部变量
- 删除环境变量
- 默认shell环境变量
- 设置PATH环境变量
- 定位环境文件
- 数组变量
Linux环境变量能帮助提升Linux shell体验。很多程序和脚本都通过环境变量还获取系统信息、存储临时数据和配置信息。
6.1 什么是环境变量
环境变量允许用户在内存中存储数据。是存储永久数据的简便方法。
环境变量分为全局和局部两种。
全局环境变量对于shell会话和所有生成的子shell都是可见的。局部变量只对创建它们的shell可见。
===
6.1.1 全局环境变量
printenv [ Name ]
描述
printenv 命令显示环境变量的值。如果您指定 Name 参数,那么系统将只显示与 Name 参数相关联的值。如果不设置 Name 参数,printenv 命令显示当前环境,每行显示一个 Name=Value 序列
(env :environment)
也可以用echo显示变量的值
echo $HOME
===
6.1.2 局部环境变量
利用set命令,但set命令会显示全局变量,局部变量以及用户的自定义变量
6.2 设置用户定义变量
6.2.1设置局部用户自定义变量
$echo $my_variable
$my_variable=Hello
$echo $my_variable
Hello
主要赋值的等号两边不能有空格,如果出现空格,bash shell会把空格后的值当成一个单独的命令。
如果要给变量赋值一个有空格的字符串,则必须用单引号来界定字符串的首和尾。
命名规则:因为系统变量都是大写字母,所以自定义变量都用小写的。
===
6.2.2 设置全局用户自定义变量
$ my_variable=”I am Global now”
$ export my_variable
$ echo $my_variable
I am Global now
进入一个子shell,验证是否是全局变量
$ \bin\bash
$ echo $my_variable
I am Global now
6.3 删除环境变量
$ echo $my_variable
Hello
$ unset my_variable
$ echo $my_variable
注意unset后面的变量名不要跟$符号
6.4 默认的shell环境变量
6.5 设置PATH环境变量
当你想要执行某个外部命令时,shell必须搜索系统来找到对应的程序。PATH环境变量定义了用于进行命令和程序查找的目录。
将应用文件放置可执行文件的目录添加到PATH环境变量中,可以直接键入可执行文件来运行,而不需要使用绝对路径。
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin: /sbin:/bin:/usr/games:/usr/local/games
$
$ PATH=$PATH:/home/christine/Scripts
$
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/
usr/games:/usr/local/games:/home/christine/Scripts
$
$ myprog
The factorial of 5 is 120.
程序员通常的办法是将单点符也加入PATH环境变量。单点符代表当前路径。
$ PATH=$PATH:.
6.6 定位系统环境变量
当你登陆Linux系统并启动一个bash shell时,默认情况下bash会在几个文件下查找命令。这些文件叫做启动文件或环境文件。
启动bash shell有3种方式:
- 登录时作为默认登陆shell
- 作为非登陆的交互式shell
- 作为运行脚本的非交互shell
===
6.6.1 登陆shell
6.6.2 交互式shell进程
不是在登陆系统时启动的(如在命令提示符下敲入bash启动时),那么你的启动的shell叫做交互式shell。
如果作为交互式shell启动,只会检查用户HOME目录下的.bashrc文件
.bashrc文件有两个作用:一是查看/etc下通用的bashrc文件,二是为用户提供一个定制自己的命令和私有脚本函数的地方。
===
6.6.3 非交互式shell
没有命令提示符。
如果想要运行一些特定启动的命令。
为了处理这种情况,bash shell提供了BASH_ENV环境变量。当shell启动一个交互式shell进 程时,它会检查这个环境变量来查看要执行的启动文件。如果有特定的文件,shell会该文件里的命令,这通常包括shell脚本变量设置。
子shell可以继承父shell的全局变量。
===
6.6.4 环境变量持久化
最好在/etc/profile.d目录中传建一个以.sh结尾的文件,把所有新的或修改过的全局环境变量设置放在这个文件中。
6.7 数组变量
$ echo $my_a
$ my_a=(a,b,c)
$ echo ${my_a[0]}
a,b,c
注意这里用逗号分隔,shell还是把它认定为同一个元素,要用空格分隔才行
$ my_a=(a b d)
$ echo ${my_a[2]}
d
$ unset my_a[2]
$ unset my_a