第6章 使用Linux环境变量

作者: Hannahhao | 来源:发表于2020-02-25 14:55 被阅读0次

    6.1 什么是环境变量

    环境变量(environment variable):储存有关shell会话和工作环境的信息。
    分为两类:

    • 全局变量(对于shell会话和所有生成的子shell都是可见的)
    • 局部变量(仅对创建它们的shell可见)

    6.1.1 全局环境变量

    系统环境变量:大写字母
    普通用户的环境变量:小写字母
    查看全局变量:env命令 或 printenv命令(显示个别环境变量的值)


    echo命令也可显示变量的值,需在变量前加上$符号,同时也能够让变量作为命令行参数。

    全局环境变量可用于进程的所有子shell,若用bash生成一个子shell,显示HOME环境变量的当前值,这个值和父shell中一模一样。

    6.1.2 局部环境变量

    局部环境变量只能在定义它们的进程中可见。目前无一个只显示局部环境变量的命令。
    set命令:显示某个特定进程设置的所有环境变量,包括局部变量、全局变量和用户自定义变量

    6.2 设置用户定义变量

    6.2.1 设置局部用户定义变量

    一旦启动了bash shell/执行一个shell脚本,就能创建在这个shell进程内可见的局部变量。
    通过等号=给环境变量赋值,值可以是数值或字符串。


    如果要给变量赋值一个含有空格的字符串值,必须用单引号来界定字符串的首和尾。
    记住!变量名、等号和值之间没有空格!
    设置了局部环境变量后,就能在shell进程任何地方使用它,但如果生成了另外一个shell,它在那个shell里不可用。

    如果你在子进程中设置了一个局部变量,一旦退出了子进程,那个局部环境变量就不可用了。

    6.2.2 设置全局环境变量

    创建全局环境变量的方法是export命令:先创建一个局部环境变量,然后再导出到全局环境中。(变量名前面不需要加$)

    修改子shell中全局环境变量并不会影响到父shell中该变量的值。 子shell无法使用export命令改变父shell中全局环境变量的值。

    6.3 删除环境变量

    unset命令:删除已经存在的环境变量(引用环境变量是不用$)。

    用到变量时,加$;操作变量时,不用加。

    和修改变量一样,在子shell中删除全局变量后,无法将效果反映到父shell中。

    6.4 默认的shell环境变量

    bash shell支持的Bourne变量
    bash shell环境变量

    6.5 设置PATH环境变量

    • 当在shell命令行界面输入一个外部命令时,shell必须搜索系统来找到对应的程序。
      PATH环境变量:定义了用于进行命令和程序查找的目录。

      输出中显示了有8个可供shell用来查找命令和程序。
      PATH中的目录使用冒号:分隔
    • 如果命令或者程序位置没用包括在PATH变量中,不使用绝对路径的话,shell没法找到,就会有如下输出:
    • ?问题:应用程序放置可执行文件的目录常不在PATH环境变量所包含的目录中。
      解决思路:保证PATH环境变量包含了所有存放应用程序的目录。
      解决方法:把新的搜索目录添加到现有的PATH环境变量中,无需从头定义。

    $ echo $PATH
    $ PATH=$PATH:/home/hannah/Scripts
    $ echo $PATH
    or
    $ PATH=$PATH:. #单点符代表当前目录
    

    把目录加到PATH环境变量后,就可以在虚拟目录结构中任何位置执行程序。但对PATH 变量的修改只能持续到退出或者重启系统,不能一致持续。

    6.6 定位系统环境变量

    启动bash shell有3种方式:

    • 登陆时作为默认登陆shell
    • 作为非登陆shell的交互式shell
    • 作为运行脚本的非交互shell

    6.6.1 登陆shell

    当登录Linux系统时,bash shell会作为登录shell启动。
    登录shell会从5个不同的启动文件里读取命令:

    • /etc/profile(主启动文件)
    • $HOME目录下的启动文件:
    $HOME/.bash_profile;$HOME/.bashrc;$HOME/.bash_login;$HOME/.profile
    

    6.6.2 交互式shell进程

    如果bash shell不是登录系统时启动,而是敲bash时启动,那么叫交互式shell。它不会访问/etc/profile,只会检查用户HOME目录的.bashrc文件。

    6.6.3 非交互式shell

    系统执行shell脚本时用的就是这种shell,不同地方在于没有命令行提示符。

    6.6.4 环境变量持久化

    在/etc/profile.d目录中创建一个以.sh结尾的文件,把所有新的或修改过的全局环境变量设置放在这个文件中。
    在大多数发行版中,储存个人用户永久性bash shell 变量的地方是$HOME/.bashrc文件。
    (可以把自己的alias设置放在$HOME/.bashrc文件中,使其效果永久化)

    6.7 数组变量

    环境变量可以作为数组使用。
    数组:储存多个值的变量。
    要给某个环境变量设置多个值,可以放在括号里,值与值之间空格分隔。



    6.8 小结

    • 全局环境变量和局部环境变量
    • PATH环境变量
    • bash shell启动文件
    • 环境变量数组

    相关文章

      网友评论

        本文标题:第6章 使用Linux环境变量

        本文链接:https://www.haomeiwen.com/subject/vhazqhtx.html