环境变量(environment variable)

    环境变量是在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环境变量:

  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。

登录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

交互式shell不会访问/etc/profile 文件,只会检查HOME目录下的.bashrc文件。

非交互式shell

系统执行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

 

  

 

 

 

  

 

        

         

    

posted on 2021-04-26 12:14  dream见  阅读(480)  评论(0编辑  收藏  举报