前言
本文是《Linux环境变量》课程的实践总结,通过在Xshell中连接虚拟机,亲手操作了环境变量的查看、创建、删除、全局变量与局部变量的区别、PATH环境变量的配置、系统环境变量配置文件以及数组变量等知识点。本文将按照PPT的顺序,逐一演示每个知识点的概念理解和实际操作,并附上操作截图,帮助正在学习Linux的你快速掌握环境变量的使用。
一、实验环境
操作系统:Ubuntu(VMware虚拟机)
远程连接工具:Xshell
Shell环境:GNU Bash
二、全局环境变量和局部环境变量
全局环境变量
全局环境变量对于shell会话和所有生成的子shell都是可见的。查看全局变量可以使用env或printenv命令。

在父shell中查看$PWD变量:
echo PWD进入子shell,在子shell中查看PWD
进入子shell,在子shell中查看PWD进入子shell,在子shell中查看PWD变量:
bash
echo PWD可以看到,即使在子shell中,PWD
可以看到,即使在子shell中,PWD可以看到,即使在子shell中,PWD变量依然可以访问,说明它是全局环境变量。
局部环境变量
局部环境变量只能在定义它们的进程中可见。Linux系统并没有一个只显示局部环境变量的命令。
五、用户设置局部变量
用户可以通过等号(=)给环境变量赋值,值可以是数值或字符串。
变量名区分大小写。所有的环境变量名均使用大写字母,这是bash shell的标准惯例。如果是你自己创建的局部变量或是shell脚本,请使用小写字母,能够避免重新定义系统环境变量可能带来的灾难。
注意事项:
1.变量名、等号和值之间没有空格。
2.如果要给变量赋一个含有空格的字符串值,必须用引号来界定字符串的首和尾。
3.只能在当前shell中使用局部环境变量。
创建局部变量
my_variable=Hello
echo $my_variable
局部变量的作用范围验证
在父shell中设置局部变量:
my_variable=Hello
echo $my_variable
进入子shell中查看:
bash
echo $my_variable
此时子shell中看不到该变量,说明它是局部变量。
退出子shell:
exit
操作截图:(此处插入局部变量创建和子shell验证截图)
含空格的变量赋值
如果变量值包含空格,必须用引号括起来:
my_variable=‘Hello World’
echo $my_variable
如果不加引号,系统会将空格后的内容识别为另一个命令,导致报错。
操作截图:(此处插入含空格变量赋值截图)
六、用户设置全局变量
方法:先创建一个局部环境变量,再通过export命令把它导出到全局环境中。
创建并导出全局变量
my_variable=‘Global variable’
export my_variable
echo $my_variable
验证全局变量
进入子shell查看:
bash
echo $my_variable
可以看到子shell中也能访问该变量。
子shell中修改变量
在子shell中给变量赋新值:
my_variable=‘NULL’
echo $my_variable
使用export将赋新值的变量导出至全局:
export my_variable
echo $my_variable
退出子shell:
exit
父shell中查看变量
echo $my_variable
可以看到,子shell中修改变量并重新export后,父shell中的变量值不受影响,仍然是原来的值。这说明修改子shell中环境变量并不会影响到父shell中该变量的值。
操作截图:
练习二

八、PATH环境变量
什么是PATH
当你在shell命令行界面中输入一个外部命令时,shell必须搜索系统来找到对应的应用程序。PATH环境变量定义了用于进行命令和程序查找的目录。PATH中的目录使用冒号(:)分隔。
查看当前PATH
echo $PATH
输出示例:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
操作截图:(此处插入echo $PATH截图)
为什么可以直接使用bash命令
像我们的bash程序就是直接输入bash调用的。这是因为echo PATH显示,/usr/bin/这一目录已经被写入到环境变量里了,所以我们可以直接使用bash命令。从apt下载的应用程序,默认都是直接放在系统PATH环境变量路径下的,所以都可以直接调用。向PATH中添加新目录如果我们自己在某个目录下安装了一个应用程序,可以把应用程序的目录添加到现有的PATH环境变量中:exportPATH=PATH显示,/usr/bin/这一目录已经被写入到环境变量里了,所以我们可以直接使用bash命令。
从apt下载的应用程序,默认都是直接放在系统PATH环境变量路径下的,所以都可以直接调用。
向PATH中添加新目录
如果我们自己在某个目录下安装了一个应用程序,可以把应用程序的目录添加到现有的PATH环境变量中:
export PATH=PATH显示,/usr/bin/这一目录已经被写入到环境变量里了,所以我们可以直接使用bash命令。从apt下载的应用程序,默认都是直接放在系统PATH环境变量路径下的,所以都可以直接调用。向PATH中添加新目录如果我们自己在某个目录下安装了一个应用程序,可以把应用程序的目录添加到现有的PATH环境变量中:exportPATH=PATH:/home/zhang/myapps
意思就是在原来的PATH值基础上,再追加一个新的目录到PATH环境变量中。
将目录加到PATH环境变量之后,你现在就可以在虚拟目录结构中的任何位置执行程序。
但是退出或重启Linux系统,则对PATH变量修改会被删除。
永久修改PATH
如果想要始终存在于PATH变量中,需要添加到~/.bashrc文件中:
vim ~/.bashrc
在文件末尾添加一行:
export PATH=$PATH:/home/zhang/myapps
保存退出后执行:
source ~/.bashrc
操作截图:(此处插入添加PATH和source命令截图)
九、存放系统环境变量的文件
在你登入Linux系统启动一个bash shell时,默认情况下bash会在启动文件(或环境文件)中查找命令。
当你登录Linux系统时,bash shell会作为登录shell启动。登录shell会从5个不同的启动文件里读取命令:
/etc/profile(系统级的)
$HOME/.profile(用户级的)
$HOME/.bashrc(用户级的)
$HOME/.bash_login(用户级的)
$HOME/.bash_profile(用户级的)
/etc/profile文件
/etc/profile文件是系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行这个启动文件。
cat /etc/profile
操作截图:(此处插入cat /etc/profile截图)
用户启动文件
用户的四个启动文件都以点号(.)开头,这说明它们是隐藏文件。这四个文件并不是全都有。
查看~/.profile:
cat ~/.profile
查看~/.bashrc:
cat ~/.bashrc
操作截图:(此处插入cat ~/.profile和cat ~/.bashrc截图)
~/.profile文件会先去检查HOME目录中是不是还有一个叫.bashrc的启动文件。如果有的话,会先执行启动文件里面的命令。
十、数组变量
数组是能够存储多个值的变量。Bash Shell只支持一维数组(不支持多维数组)。环境变量可作为数组使用。这些值可以单独引用,也可以作为整个数组来引用。
创建数组
Shell数组用括号()来表示,元素用空格符号分割开,语法格式如下:
array_name=(value_1 value_2 … value_n)
my_test=(one two three four five)
echo ${my_test[]}
引用数组元素
要引用、读取数组中某个元素的值,必须用它在数组中位置的数值索引值,如下:
${array_name[index]}
索引值(index)要用方括号([])括起来(与大部分编程语言类似,数组元素的下标由0开始)。
echo ${my_test[0]}
echo ${my_test[1]}
echo ${my_test[2]}
显示整个数组
要显示整个数组变量,可用星号()作为通配符放在索引值的位置。
echo ${my_test[]}
修改数组元素
用等号(=)可以改变数组中某个索引值位置的值。
my_test[1]=five
echo ${my_test[]}
删除数组元素
unset命令删除数组中的某个值或整个数组。但是unset删除索引上的值但是保留索引位置。
删除一位成员:
unset my_test[1]
echo ${my_test[]}
查看被删除的索引位置:
echo ${my_test[1]}
可以看到该位置为空,但索引位置仍然保留。
删除整个数组
unset my_test
echo ${my_test[]}
操作截图:
练习三

十一、知识框架总结
环境变量分类
全局环境变量:对所有shell和子shell可见,使用env或printenv查看
局部环境变量:只对当前shell可见,使用set查看所有变量(包含全局和局部)
环境变量操作命令
env:查看所有全局环境变量
printenv:查看所有全局环境变量
set:查看所有环境变量(包括局部、全局和用户定义)
echo $变量名:查看单个环境变量的值
export 变量名:将局部变量导出为全局变量
unset 变量名:删除环境变量
变量赋值规则
变量名、等号和值之间不能有空格
含空格的字符串值需要用引号括起来
变量名区分大小写,自定义变量建议用小写字母
PATH环境变量
PATH定义了shell查找命令的目录列表,由冒号分隔
export PATH=$PATH:/新目录:临时添加新目录到PATH
修改~/.bashrc并执行source:永久添加新目录到PATH
系统环境变量文件
/etc/profile:系统级启动文件,所有用户登录时执行
~/.profile:用户级启动文件
~/.bashrc:用户级启动文件,包含环境变量定义
数组变量
创建:array=(value1 value2 value3)
查看单个元素:array[index]查看所有元素:{array[index]}
查看所有元素:array[index]查看所有元素:{array[*]}
修改元素:array[index]=newvalue
删除元素:unset array[index]
删除数组:unset array
33万+

被折叠的 条评论
为什么被折叠?



