提示:

在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. swagger的作用和配置使用

    纯API项目中 引入swagger可以生成可视化的API接口页面     引入包 nuget包: Swashbuckle.AspNetCore(最新稳定版) 配置 1.配置Startup类Config ...

  2. (stm32f103学习总结)—stm32外部中断

    一.外部中断介绍 1.1 EXTI简介 EXTI简介 STM32F10x外部中断/事件控制器(EXTI)包含多达 20 个用于产生事 件/中断请求的边沿检测器.EXTI的每根输入线都可单独进行配置,以 ...

  3. 如何正确的阅读Datasheet?

    不仅仅是芯片,包括工具.设备几乎任何电子产品,都需要去阅读它的datasheet,除了包括最低.最高要求,特点,建议和用途及其兼容的设备等等,更重要的是原厂商以一个成功者的身份去告诉你一些注意事项. ...

  4. 创建TypeScript代码模板(NVS+Yarn+ESLint+Prettier+Husky)

    创建TypeScript代码模板(NVS+Yarn+ESLint+Prettier+Husky) Cui, Richard Chikun 本文笔者将带你在Github代码仓库创建TypeScript代 ...

  5. css3 弹性布局和多列布局

    弹性盒子基础 弹性盒子(Flexible Box)是css3中盒子模型的弹性布局,在传统的布局方式上增加了很多灵活性. 定义一个弹性盒子 在父盒子上定义display属性: #box{ display ...

  6. 关于disabled的事,你用对了吗?

    大家都知道disabled属性用来禁用表单里的元素.如果让你来禁用一个表单元素,你会怎么做么,下面提供几种写法,各位看官请看 html: <button type='button'>tes ...

  7. react在移动端的自适应布局

    react+flexible适配布局 (1)npm i lib-flexible --save (2)npm i postcss-px2rem --save (3)在 node_modules/rea ...

  8. Java中jdk安装与环境变量配置

    Java中jdk安装与环境变量配置 提示:下面是jdk1.7和jdk1.8的百度网盘链接 链接:https://pan.baidu.com/s/1SuHf4KlwpiG1zrf1LLAERQ 提取码: ...

  9. Windows下安装mysql(非安装包)

    Windows下安装mysql(非安装包) 参考:https://www.cnblogs.com/yunlongaimeng/p/12558638.html 1.下载MYSQL(慢的话可以用迅雷,或其 ...

  10. k8s 初始化环境(1)

    概念 k8s/kubernetes 容器化部署 解决容器编排问题,kubernetes为容器编排软件的佼佼者 kubernets为一组服务器集群 功能 自我修复 一个容器崩溃,另一个容器起来 弹性伸缩 ...