提示:

在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. C++中sort()函数使用介绍

    sort()简介 为什么选择使用sort()  在刷题的时候我们经常会碰到排序的问题,如果我们不使用一些排序的方法那我们只能手撕排序,这样就会浪费一些时间.而且我们还需要根据需要去选择相关的排序方法: ...

  2. 通过HTML5的getUserMedia实现拍照功能

    参考HTML5Rocks的这篇文章实现的一个简单的例子. 思路如下: 1. 把冰箱门打开 2. 把大象放进冰箱里 3. 把冰箱门关上 好了不开玩笑了,其实思路是: 1. 通过getUserMedia调 ...

  3. SQL之创建表

    1.创建表------ (方法一)-------create table Persons(id NUMBER,                                       age NU ...

  4. 微信小程序 使用filter过滤器几种方式

    由于微信小程序 技术生态比较闭合,导致很多 现代前端框架很多积累出的成果都没有实现(可能未来会逐一实现). 用惯了现代 再耍小程序 总感觉很不顺手. 需要结果的请直接看最后的WXS View Filt ...

  5. java中如何按一定的格式输出时间, 必须给出例子

    题目2: 按一定的格式输出时间 import java.util.*;import java.text.SimpleDateFormat;public class Test {    public s ...

  6. 初识react中高阶组件

    高阶组件并不是一个组件,而是一个函数 这个函数返回值是一个组件,并且接受一个组件做为参数:并且返回一个新组件: function HighOC(WrapComponent){ //定义一个高阶组件 , ...

  7. SpatiaLite 数据库使用记录

    SpatiaLite 数据库使用记录 官网 https://www.gaia-gis.it/fossil/libspatialite/index 下载地址 https://www.gaia-gis.i ...

  8. 从实例学习 Go 语言、"并发内容" 学习笔记及心得体会、Go指南

    第一轮学习 golang "并发内容" 学习笔记,Go指南练习题目解析.使用学习资料 <Go-zh/tour tour>.记录我认为会比较容易忘记的知识点,进行补充,整 ...

  9. css 实现输入效果

    <template>   <h1>Pure CSS Typing animation.</h1> </template> <script> ...

  10. InnoDB两次写

    partial page write问题: 默认情况下,innodb的一个页面时16k大小,其数据校验也是针对这16k来校验的,将数据写入磁盘是以页面为单位的.文件系统是以4k为单位写入的,机械磁盘是 ...