提示:

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

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

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

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

(1)环境变量设置

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

格式:

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

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

[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命令删除变量。

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

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

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

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

(1)PATH环境变量

查看当前系统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

每次执行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环境变量下的任一个目录下即可。
    #拷贝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环境变量中即可。

    通过变量的叠加就可以实现:
    #在变量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中。(可查看后续文章)

『忘了再学』Shell基础 — 13、环境变量(一)的更多相关文章

  1. 『忘了再学』Shell基础 — 11、变量定义的规则和分类

    目录 1.定义变量的规则 2.变量的分类 1.定义变量的规则 在定义变量时,有一些规则需要遵守 变量名称可以由字母.数字和下划线组成,但是不能以数字开头.如果变量名是2name则是错误的. 在Bash ...

  2. 『忘了再学』Shell基础 — 21、变量的测试与内容置换

    目录 1.什么是变量的测试与内容置换 2.变量的测试与内容置换 3.示例 例1: 例2: 例3: 1.什么是变量的测试与内容置换 我们之前说过,在Shell中,一个变量未定义,和一个变量为空值的输出效 ...

  3. 『忘了再学』Shell基础 — 22、主要的环境变量配置文件说明

    目录 1.source命令 2.Linux系统中环境变量配置文件 (1)登录时生效的环境变量配置文件 (2)/etc/profile环境变量配置文件 (3)/etc/profile.d/*.sh环境变 ...

  4. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

  5. 『忘了再学』Shell基础 — 4、Bash基本功能(history命令)

    目录 1.history历史命令 2.设置命令历史记录的条数 3.清空历史命令 4.历史命令的调用 5.命令与文件的补全 在Linux系统中默认的Shell就是Bourne-AgainShell(简称 ...

  6. 『忘了再学』Shell基础 — 23、其他环境变量配置文件

    目录 1.注销时生效的环境变量配置文件 2.其他配置文件 3.Shell登录信息相关文件 (1)/etc/issue文件说明 (2)/etc/issue.net文件说明 (3)/etc/motd文件说 ...

  7. 『忘了再学』Shell基础 — 5、Bash基本功能(命令的别名和常用快捷键)

    目录 1.给命令设置别名 (1)设置别名的命令格式 (2)命令别名永久生效 (3)别名的优先级 2.Bash常用快捷键 1.给命令设置别名 Linux系统的命令别名我们之前已经说过了,这里再过一边. ...

  8. 『忘了再学』Shell基础 — 12、用户自定义变量

    目录 1.变量定义 2.变量调用 3.变量的修改 4.查看变量 (1)-u选项说明: (2)-x选项说明: (3)set命令说明: 5.变量删除 1.变量定义 变量正确定义. 格式:变量名=" ...

  9. 『忘了再学』Shell基础 — 14、环境变量(二)

    目录 1.PS1变量的作用 2.PS1变量的查看 2.PS1可以支持的选项 3.PS1环境变量的配置 4.总结 提示: 在Linux系统中,环境变量分为两种.一种是用户自定义的环境变量,另一种是系统自 ...

随机推荐

  1. 算法导论 - 基础知识 - 算法基础(插入排序&归并排序)

    在<算法导论>一书中,插入排序作为一个例子是第一个出现在该书中的算法. 插入排序: 对于少量元素的排序,它是一个有效的算法. 插入排序的工作方式像许多人排序一手扑克牌.开始时,我们手中牌为 ...

  2. python模块 | 时间处理模块—datetime模块

    在python中,与时间处理相关的模块有 time,datetime,calendar. 时间的两个概念: UTC(世界协调时): 整个地球分为二十四时区,每个时区都有自己的本地时间.格林威治天文时间 ...

  3. flex布局中父容器属性部分演示效果

    如图可见flex的属性分为父容器和子容器的属性共12个.关于这些属性具体代表什么意思,网上有很多教程的文章,自觉不能写得比别人更好,所以这里主要写了一些例子关于父容器属性效果的演示,希望可以帮助大家理 ...

  4. Socket.io+Notification实现浏览器消息推送

    前言 socket.io: 包含对websocket的封装,可实现服务端和客户端之前的通信.详情见官网(虽然是英文文档,但还是通俗易懂).Notification: Html5新特性,用于浏览器的桌面 ...

  5. 论文阅读总结-Patient clustering improves efficiency of federated machine learning to predict mortality and hospital stay time using distributed electronic medical records

    一.论文提出的方法: 使用进入ICU前48h的用药特征作为预测因子预测重症监护患者的死亡率和ICU住院时间. 用到了联邦学习,自编码器,k-means聚类算法,社区检测. 数据集:从50家患者人数超过 ...

  6. JavaScript实现按钮改变网页背景色

    运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...

  7. flex布局控制最后一个元素右浮动

    可以在最后一个元素添加css属性 margin-left: auto; 例如我一排排列的元素 ,子元素并没有完全排列撑开父元素的宽度,这时候要使最后一个元素想最右 可以让最后一个元素的 margin- ...

  8. DRF-认证权限频率

    目录 DRF-认证权限频率 认证 登录接口 认证 权限 作用 使用 频率 作用 使用 认证权限频率+五个接口 模型 视图 序列化器 认证权限频率类 配置文件 路由 DRF-认证权限频率 前后端混合开发 ...

  9. OllyDbg---call和ret指令

    call和ret call指令 cal指令是转移到指定的子程序处,后面紧跟的操作数就是给定的地址. 例如,call 401362表示转移到地址401362处,调用401362处的子程序,当子程序调用完 ...

  10. redis的基础命令操作

    文章目录 前言 一.字符串类型 二.哈希类型 三.列表类型 四.集合类型 五.有序集合类型 六.通过命令 前言 redis的数据结构 redis存储的是key,value格式的数据,其中的key是字符 ...