前言本文是《Linux环境变量》课程的实践总结通过在Xshell中连接虚拟机亲手操作了环境变量的查看、创建、删除、全局变量与局部变量的区别、PATH环境变量的配置、系统环境变量配置文件以及数组变量等知识点。本文将按照PPT的顺序逐一演示每个知识点的概念理解和实际操作并附上操作截图帮助正在学习Linux的你快速掌握环境变量的使用。一、实验环境操作系统UbuntuVMware虚拟机远程连接工具XshellShell环境GNU Bash二、全局环境变量和局部环境变量全局环境变量全局环境变量对于shell会话和所有生成的子shell都是可见的。查看全局变量可以使用env或printenv命令。在父shell中查看$PWD变量echoPWD进入子shell在子shell中查看PWD 进入子shell在子shell中查看PWD进入子shell在子shell中查看PWD变量bashechoPWD可以看到即使在子shell中PWD 可以看到即使在子shell中PWD可以看到即使在子shell中PWD变量依然可以访问说明它是全局环境变量。局部环境变量局部环境变量只能在定义它们的进程中可见。Linux系统并没有一个只显示局部环境变量的命令。五、用户设置局部变量用户可以通过等号给环境变量赋值值可以是数值或字符串。变量名区分大小写。所有的环境变量名均使用大写字母这是bash shell的标准惯例。如果是你自己创建的局部变量或是shell脚本请使用小写字母能够避免重新定义系统环境变量可能带来的灾难。注意事项1.变量名、等号和值之间没有空格。2.如果要给变量赋一个含有空格的字符串值必须用引号来界定字符串的首和尾。3.只能在当前shell中使用局部环境变量。创建局部变量my_variableHelloecho $my_variable局部变量的作用范围验证在父shell中设置局部变量my_variableHelloecho $my_variable进入子shell中查看bashecho $my_variable此时子shell中看不到该变量说明它是局部变量。退出子shellexit操作截图此处插入局部变量创建和子shell验证截图含空格的变量赋值如果变量值包含空格必须用引号括起来my_variable‘Hello World’echo $my_variable如果不加引号系统会将空格后的内容识别为另一个命令导致报错。操作截图此处插入含空格变量赋值截图六、用户设置全局变量方法先创建一个局部环境变量再通过export命令把它导出到全局环境中。创建并导出全局变量my_variable‘Global variable’export my_variableecho $my_variable验证全局变量进入子shell查看bashecho $my_variable可以看到子shell中也能访问该变量。子shell中修改变量在子shell中给变量赋新值my_variable‘NULL’echo $my_variable使用export将赋新值的变量导出至全局export my_variableecho $my_variable退出子shellexit父shell中查看变量echo $my_variable可以看到子shell中修改变量并重新export后父shell中的变量值不受影响仍然是原来的值。这说明修改子shell中环境变量并不会影响到父shell中该变量的值。操作截图练习二八、PATH环境变量什么是PATH当你在shell命令行界面中输入一个外部命令时shell必须搜索系统来找到对应的应用程序。PATH环境变量定义了用于进行命令和程序查找的目录。PATH中的目录使用冒号:分隔。查看当前PATHecho $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调用的。这是因为echoPATH显示/usr/bin/这一目录已经被写入到环境变量里了所以我们可以直接使用bash命令。从apt下载的应用程序默认都是直接放在系统PATH环境变量路径下的所以都可以直接调用。向PATH中添加新目录如果我们自己在某个目录下安装了一个应用程序可以把应用程序的目录添加到现有的PATH环境变量中exportPATHPATH显示/usr/bin/这一目录已经被写入到环境变量里了所以我们可以直接使用bash命令。 从apt下载的应用程序默认都是直接放在系统PATH环境变量路径下的所以都可以直接调用。 向PATH中添加新目录 如果我们自己在某个目录下安装了一个应用程序可以把应用程序的目录添加到现有的PATH环境变量中 export PATHPATH显示/usr/bin/这一目录已经被写入到环境变量里了所以我们可以直接使用bash命令。从apt下载的应用程序默认都是直接放在系统PATH环境变量路径下的所以都可以直接调用。向PATH中添加新目录如果我们自己在某个目录下安装了一个应用程序可以把应用程序的目录添加到现有的PATH环境变量中exportPATHPATH:/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截图用户启动文件用户的四个启动文件都以点号.开头这说明它们是隐藏文件。这四个文件并不是全都有。查看~/.profilecat ~/.profile查看~/.bashrccat ~/.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]fiveecho ${my_test[]}删除数组元素unset命令删除数组中的某个值或整个数组。但是unset删除索引上的值但是保留索引位置。删除一位成员unset my_test[1]echo ${my_test[]}查看被删除的索引位置echo ${my_test[1]}可以看到该位置为空但索引位置仍然保留。删除整个数组unset my_testecho ${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