环境变量是在bash shell 的一个特性,用来存储系统信息、临时数据以及配置信息。在bash shell中,环境变量可分为两类:全局变量和局部变量。
作用范围:当前shell进程及其子shell进程
查看全局环境变量:
查看所有全局环境变量:env或printenv
查看个别环境变量:printenv VARNAME
echo $VARNAME
设置全局环境变量:export 命令用于导出一个局部环境变量到全局环境中
export VARNAME=VALUE 或 export VARNAME(此时VARNAME为一个已经存在的局部环境变量)
注:父shell创建的全局环境变量在子shell中有效,但子shell创建和修改(包括删除)全局变量都不会反映到父shell中。
作用范围:当前shell进程
查看局部环境变量:set (此命令会显示所有环境变量,包括全局变量、局部变量以及用户自定义变量,此外,显示结果还会按字母顺序排序)
设置局部用户定义环境变量:VARNAME=VALUE
若VALUE含有空格,则需用引号括起来:VARNEME=“VALUE”
unset命令用于删除已经存在的环境变量:unset VARNAME
注:在涉及环境变量名时,什么如果要用到变量,就要使用$;如果要操作变量,不使用$(printenv命令除外)。
PATH环境变量定义了用于进行命令和程序查找的目录,其中的路径用:隔开。当在shell命令行界面输入一个外部命令时,shell会从PATH变量定义的路径中依次查找,直到找到对应程序。
zhyd@zhyd-Inspiron-5590:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
如果命令或程序的位置没有包含在PATH变量中,那么不使用绝对路径的话,shell是没法找到的。可以将可执行文件的路径添加到PATH变量中以便在目录的任何位置都能直接执行:
PATH=$PATH:/DIR1/DIR2...
一个执行当前目录下可执行文件的便捷方法是将当前目录(.)添加到PATH中:
PATH=$PATH:.
系统环境变量是持久化的环境变量,因此是位于bash配置文件中的变量。
要实现环境变量的持久化,可修改shell的变量配置文件,如在/etc/profile.d 下创建一个以 .sh结尾的文件,保存新的或修改过的环境变量;或修改 $HOME/.bashrc 永久存储个人用户设置。
启动bash shell的方式有三种:登录时作为默认登录shell、作为非登录shell的交互式shell、作为运行脚本的非交互式shell。
当用户以登录方式启动一个bash shell时,bash会在几个文件中查找命令.
/etc/profile: bash shell 的主启动文件。只要登录了Linux,bash就会执行其中的命令;
/etc/bash.bashrc: 包含了系统环境变量;
/etc/profile.d : 是一个目录,其中包含了不同shell和系统特定应用的配置文件;
$HOME目录下的启动文件:提供一个用户专属的启动文件来定义该用户所用到的环境变量。Linux会用到其中的1~2个.在用户登录时,会运行第一个被找到的文件,余下的则被忽略。
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile
注:$HOME下还有一个.bashrc文件,其为用户提供了存放命令别名和私有脚本函数的地方。其执行是通过其他文件来执行的,如.bash_profile。
交互式shell不会访问/etc/profile 文件,只会检查HOME目录下的.bashrc文件。
系统执行shell脚本的方式是非交互式的。
交互式shell执行命令的方式有两种:
1.通过BASH_ENV环境变量来查看要启动的文件;
2.使用当前shell的环境变量或继承父shell 的环境变量。
数组是存储多个值的变量,赋值时用空格隔开,所有值用括号括起来。
mytest=(one two three four five)
使用某个环境变量需要索引值(从0开始),索引值用方括号括起来。索引值支持通配。
echo ${mytest[2]} three echo ${mytest[*]} one two three four five