• 『忘了再学』Shell基础 — 13、环境变量(一)


    提示:

    在Shell中,环境变量分为两种。一种是用户自定义的环境变量,另一种是系统自带的环境变量。

    而在系统自带的环境变量中,PATH环境变量、PS1环境变量、LANG语系变量需要进行说明一下。

    本篇文章主要说明用户自定义的环境变量,和PATH环境变量。

    1、用户自定义的环境变量

    (1)环境变量设置

    使用export关键字声明的变量就是环境变量。
    格式:

    shell
    [root@localhost ~]# export AGE="18"

    也可以先定义一个自定义变量,然后把自定义变量声明称环境变量。如下:

    shell
    [root@localhost ~]# AGE=18
    [root@localhost ~]# export AGE

    注:
    环境变量名称一般要用大写。
    环境变量的作用域,在父子Shell中都可查看。

    (2)查询自定义环境变量

    env命令和set命令的区别是,set命令可以查看所有变量,而env命令只能查看环境变量。(具体看上一篇文章)

    这里说明一下env命令和set命令所查看的一些重要的内容,以后就不详细说明了。

    (1)env命令

    (2)set命令

    env命令可以查询到所有的环境变量,但是还有一些变量是env命令查看不到的,这些变量虽然不是环境变量,却是和Bash操作接口相关的变量,这些变量也对我们的Bash操作终端起到了重要的作用。这些变量就只能用set命令来查看了,只列出重要的内容,如下:

    (3)删除自定义环境变量

    和用户定义变量一样,用unset命令删除变量。

    shell
    #删除环境变量 gender
    [root@localhost ~]# unset gender

    2、系统自带的环境变量——PATH环境变量

    系统自带的环境变量的名称和作用都不能够改变。

    系统的环境变量,用上边介绍的env命令和set命令都可以查出。我们接下来说明几个比较重点的环境变量。

    (1)PATH环境变量

    查看当前系统PATH环境变量的值:

    shell
    [root@localhost ~ ] # echo $PATH
    /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

    每次执行env命令和set命令都要在好多变量中找我们需要查看的变量很麻烦,可以使用上面的方式直接查看我们所需的变量的值。

    (2)PATH环境变量的作用

    PATH变量的作用:系统查找命令的路径。

    你回想一下,在说明Shell执行脚本运行的时候说过,有两种方法可以执行Shell脚本,一个是通过绝对路径或者相对路径执行脚本,如:/root/hello.sh或者./hello.sh。还有一种方法是直接执行bash命令执行脚本,如:bash hello.sh。我们当时建议用第一种方式。(在Linux系统中,所有的执行文件,都应该使用绝对路径来执行它)

    但是我们有没有发现,比如我们之前所执行过的一些系统命令,如ls命令,我们知道ls命令在系统的bin目录下。如下图:

    但是我们直接执行ls命令,并没有使用绝对路径,系统就能够执行ls命令,这是为什么呢?

    根本原因就是在这个PATH环境变量中。
    PATH环境变量中配置的这些路径,就是系统查找命令的路径。也就是说当我们输入了一个程序名,如果没有写命令的路径,系统就会到PATH环境变量定义的路径中去寻找,是否有可以执行的程序。从左到右一个一个目录查找你所要执行的命令,找到了就直接执行,而如果把所有的目录都搜索完了,也没有找到你所执行的命令,就会报错,提示你-bash:变量名:command not found(命令没找到)。换句话说也就是你这个命令执行的不正确,也或者说你所执行的命令,并没有配置在PATH环境变量中。

    注意:PATH环境变量的值中,是用“:”分割的路径。

    (3)配置命令的环境变量

    我们如何才能让一个自定义的程序或者脚本,不用输入绝对路径就能够执行呢?

    有两种方式:

    • 第一种方式:直接把程序或者脚本的可执行文件,直接复制到PATH环境变量下的任一个目录下即可。
      shell
      #拷贝hello.sh文件到bin目录下
      [root@localhost ~]# cp /root/sh/hello.sh  /bin/
      
      #hello.sh脚本即可以直接执行
      [root@localhost ~]# hello.sh
      Perhaps only heart no holdings, to being on land, settle.
      也许只有心无所持,才能随遇而安。
    • 第二种方式:把程序或者脚本所有在的路径,添加到PATH环境变量中即可。
      通过变量的叠加就可以实现:
      shell
      #在变量PATH的后面,加入/root/sh目录
      [root@localhost ~]# PATH="$PATH":/root/sh
      
      #查询PATH的值,变量叠加生效了
      [root@localhost ~]# echo $PATH
      /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/sh

      注意的是,我们这样定义的PATH环境变量只是临时生效,一旦重启或注销就会消失,如果想要永久生效,需要写入环境变量配置文件/etc/profile中。(可查看后续文章)


    __EOF__

  • 本文作者: 繁华似锦的博客
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/16283976.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    饭局从入门到精通
    TI 毫米波雷达开发内容拆解分析
    RabbitMQ配置文件_修改RabbitMQ MQTT的1883端口
    m基于MIMO中继通信和非规则LDPC编译码的matlab仿真,其中波束形成为SVD,MMSE,中继包括AF,DF,CF
    大数据必学Java基础(十二):基本数据类型
    linux中awk命令有何作用?
    ARM 汇编写启动代码之设置栈和调用C语言
    python中有时使用pip安装库而有时又使用conda安装库,到底应该使用哪个管理工具进行库的安装呀?
    ITem2 + Oh My Zsh配置
    Mysql数据库文件太大无法导入数据库
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/16283976.html