Linux环境变量课程内容完整总结

一、环境变量基础概念

  1. 定义
    环境变量是变量名=值格式的键值对,由操作系统/Shell维护,用于存储会话、系统、用户环境信息,脚本与程序可快速读取使用;bash依靠环境变量保存工作环境数据。系统环境变量规范全大写,自定义局部变量建议小写避免覆盖系统变量。
  2. bash内置默认环境变量
    分为Bourne原生变量、bash扩展自有变量两类,核心常用变量:
    | 变量 | 作用 |
    |------|------|
    | HOME | 当前用户家目录 |
    | PATH | 命令搜索目录,多路径用:分隔 |
    | PWD | 当前工作目录 |
    | PS1/PS2 | 主、次命令行提示符 |
    | IFS | 文本分割字段符号 |
    | RANDOM | 生成0~32767随机数 |
    | UID/EUID | 用户真实ID、有效ID |
    | SHELL | 当前Shell程序路径 |

二、环境变量分类:全局变量 & 局部变量

1. 全局环境变量

  • 作用域:当前Shell会话+所有子Shell均可访问,子Shell会继承父Shell全局变量;子Shell修改变量仅自身生效,不影响父Shell。
  • 查看命令:
    • env/printenv:只查看全局环境变量;
    • echo $变量名:单独打印某个变量值,引用变量必须加$

2. 局部环境变量

  • 作用域:仅定义它的当前Shell可见,子Shell无法读取。
  • 查看命令:set,输出包含局部、全局、自定义所有变量,自动字母排序。

3. 变量创建规则

  1. 赋值时变量=值,等号两侧不能有空格
  2. 值含空格需用单/双引号包裹,如var='hello world'
  3. 重复赋值会直接覆盖原有值。

三、自定义变量操作(增、导出、删、永久生效)

1. 创建局部变量

直接赋值:test=123,仅当前终端可用,子Shell读取为空。

2. 转为全局变量(export)

  1. 两步法:先定义局部变量,再export 变量名
  2. 一步法:export test="全局变量"
  3. 特性:子Shell可读取;子Shell内修改该变量,退出后父Shell原值不变。

3. 删除变量 unset

  • 语法:unset 变量名,操作变量不加$;读取变量才加$
  • 特性:子Shell删除仅对子Shell生效,父Shell变量不受影响;临时变量关闭终端直接消失。

4. 变量永久生效(写入配置文件)

临时定义的变量重启Shell/系统会丢失,持久化配置步骤:

  1. 编辑用户配置文件:vim ~/.bashrc
  2. 文件末尾添加export 变量=值
  3. 重载配置立即生效:source ~/.bashrc
    原理:每次登录启动bash会自动读取.bashrc执行内部命令。

四、PATH环境变量(命令搜索路径)

  1. 作用:Shell输入命令时,按PATH内目录顺序查找可执行程序,目录间用冒号:分隔;系统自带软件路径默认已写入PATH,可直接输入命令执行。

五、存储环境变量的系统/用户配置文件

登录Shell会依次读取多份启动文件,分为系统级用户级两类:

  1. 系统全局文件(所有用户生效)
    • /etc/profile:系统主启动文件,所有用户登录自动执行;内部会加载/etc/bash.bashrc,并遍历/etc/profile.d/*.sh脚本;
  2. 用户私有隐藏文件(仅当前用户生效,家目录下)
    • ~/.bash_profile/~/.bash_login/~/.profile:登录Shell加载;
    • ~/.bashrc:交互式Shell必加载,.profile会主动引入该文件,自定义环境变量首选此文件;
    • 文件均为.开头隐藏文件,ls -a可查看。

六、Bash数组变量

  1. 基础特性:仅支持一维数组,存储多个值;括号()定义,元素空格分隔;下标从0开始。
  2. 基础语法
    • 定义:arr=(one two three)
    • 读取单个元素:${arr[下标]},如${arr[1]}取第二个元素;
    • 读取全部元素:${arr[*]}
  3. 数组修改与删除
    • 修改指定下标值:arr[1]=five
    • 删除单个元素:unset arr[1],仅清空值,下标保留;
    • 删除整个数组:unset arr

七、配套练习与课后作业

三大课堂练习题

  1. 练习1:env/printenv/set对比查看;父子Shell查看$PWD;区分全局、局部变量可见性;
  2. 练习2:export导出全局变量;子Shell修改变量验证不影响父Shell;
  3. 练习3:数组创建、修改成员、删除单个元素、删除整个数组。

八、核心小结

  1. Linux环境变量分全局、局部两类,核心区别是能否被子Shell继承
  2. export实现局部变量全局化,unset删除变量;临时变量写入.bashrc实现永久生效;
  3. PATH决定系统命令检索路径,可手动追加自定义程序目录;
  4. bash登录时加载系统+用户多层配置文件,统一初始化环境变量;
  5. bash支持一维数组,可批量存储、修改、删除多组数据。