Linux 环境变量课堂笔记

一、什么是环境变量

1. 基础概念

  1. 环境变量是操作系统 / Shell 提供的键值对变量名=值,用于存储会话、系统配置信息,程序、脚本可直接读取使用。
  2. 作用:在内存持久存储数据,方便 Shell、应用程序调用。
  3. 命名规范:系统自带环境变量全大写;自定义局部变量建议小写,避免覆盖系统变量。

2. 两类环境变量

(1)全局环境变量

作用范围:当前 Shell + 所有子 Shell 都能访问。

查看命令:

env/printenv:只打印全局环境变量

echo $变量名:单独查看某一个变量值(必须加$

示例:

1.分别执行envprintenvset,对比输出差异

env

env

只输出全局环境变量(export 导出的变量、系统全局变量)

格式:变量名=值

不输出函数、局部自定义变量、Shell 内置临时变量

printenv

功能和env几乎完全一致,同样只打印全局环境变量

额外用法:可单独查询单个变量printenv HOME

输出内容、行数和 env 几乎无差别

set

输出全部内容:全局变量 + 局部自定义变量 + Shell 函数 + Shell 内置临时变量

输出内容远多于 env/printenv,行数最多

会打印你当前会话定义的局部变量、脚本函数等临时内容

2.父 Shell 查看 $PWD,进入子 Shell 再次查看,验证全局变量继承。

二、自定义用户变量

1. 创建局部变量(仅当前 Shell 生效)

语法规则:变量名=值

  1. 等号两侧不能有空格
  2. 值包含空格时,用单 / 双引号包裹;
  3. 子 Shell 无法读取局部变量,退出终端变量直接消失。 示例:

练习:父 shell 定义局部变量,进子 shell 查看;子 shell 定义局部变量,退出后父 shell 查看,均无法读取。

2. 创建全局变量(子 Shell 也可访问)

步骤:先定义局部变量 →export导出为全局

my_var="全局变量测试" export my_var bash # 进入子shell echo $my_var # 子shell可读取 my_var="修改值" # 子shell修改变量 exit echo $my_var # 父shell值不变,子shell修改不影响父shell

核心特点:子 Shell 修改全局变量,仅在自身内部生效,不会向上覆盖父 Shell 的变量值。

三、删除环境变量

命令:unset 变量名注意:操作变量时 ** 不加 $**;读取变量时才加 $。 示例流程:

  1. 父 shell 导出全局变量export test=123
  2. 进入子 shell,unset test,子 shell 中变量消失
  3. exit 退回父 shell,变量依然存在
  4. 父 shell 执行unset test,变量彻底删除

练习步骤:

  1. 子 shell 读取父 shell 全局变量
  2. 子 shell unset 删除变量
  3. 退出子 shell,父 shell 变量仍存在
  4. 父 shell 执行 unset,变量彻底清除

四、系统默认 Shell 环境变量

1. 传统 Bourne 内置变量

表格

变量作用
CDPATHcd 命令的搜索目录(冒号分隔)
HOME当前用户家目录
IFS字段分隔符
MAIL用户邮箱文件路径
MAILPATH多邮箱文件列表
OPTARG / OPTINDgetopts 命令专用参数

2. Bash 独有扩展变量

表格

变量作用
BASH当前 bash 程序完整路径
PWD当前工作目录
UID用户数字 ID
HOSTNAME主机名
LINES终端可见行数
GROUPS当前用户所属用户组数组

五、PATH 环境变量(重点)

1. 作用

Shell 输入命令时,自动在 PATH 内的目录查找可执行程序;目录用冒号:分隔。 查看 PATH:

2. 临时添加自定义目录

如果脚本所在目录不在 PATH,无法直接运行;可临时追加目录:

⚠️ 缺点:临时生效,重启终端 / 系统后失效。

配套练习

  1. 编写hello.sh脚本;
  2. 不修改 PATH,直接运行,提示命令不存在;
  3. 追加目录到 PATH 后,可直接运行;
  4. 重启终端,再次执行脚本失效;
  5. 权限不足时添加执行权限:chmod u+x hello.sh

六、环境变量配置文件(永久生效配置)

登录 Shell 启动时,会按固定顺序读取配置文件,写入变量可永久生效。

1. 系统级全局配置(所有用户生效)

/etc/profile

系统所有用户登录都会加载;

内部会循环加载/etc/profile.d/*.sh下所有脚本;

适合配置全用户共用环境变量。

2. 用户级专属配置(仅当前用户生效)

登录时按优先级依次查找,找到第一个就停止读取:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile上述文件内部一般会主动加载~/.bashrc(终端交互配置)。

使用技巧

把自定义环境变量、PATH 配置写入上述文件,新开终端自动生效; 立即生效不用重启:source 配置文件

七、数组变量

环境变量支持数组,可存储多个值,下标从 0 开始。

1. 数组定义与读取

2. 修改、删除数组

数组练习

  1. 创建存储组员姓名的数组;
  2. 修改其中一位成员;
  3. 删除一名成员;
  4. 彻底删除整个数组。

本章小结

  1. Linux 环境变量分为全局变量(父子 shell 共享)、局部变量(仅当前 shell);
  2. export将局部变量提升为全局,unset删除变量;
  3. PATH 控制命令搜索路径,临时修改重启失效,写入配置文件永久生效;
  4. Shell 登录时自动加载/etc/profile、用户家目录下.bash_profile/.profile等配置文件;
  5. 环境变量支持数组,通过下标存取多组数据。