环境变量是 Shell 脚本和 Linux 操作中不可或缺的一环。无论是系统启动、软件运行,还是日常命令执行,它们都在背后“默默工作”。本节将带你全面掌握环境变量的使用方式和实战技巧。下面操作以ubuntu为例。
一、什么是环境变量?
环境变量是系统级的变量,它们影响 Shell 的行为和正在运行的进程。
- 类似于“操作系统的全局设置”。
- 用于保存如路径信息、用户名、语言设置、历史记录等。
二、设置环境变量:export 命令
基本语法
export 变量名=值
配置 Java 环境变量
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
这个变量将被所有子 Shell 继承。
👆 这个命令将 JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/bin
目录添加到 PATH 环境变量中。
小提示
- 用
export
设置的变量对当前 shell 和子 shell有效。 - 若只使用
变量名=值
,则仅在当前 shell 有效,子进程无法继承。
三、查看环境变量
方式一:使用 echo
#查看 PATH 环境变量
echo $PATH
#查看当前登录用户的主目录
echo $HOME
方式二:使用 env
或 printenv
env
printenv
默认显示所有当前 shell 的环境变量,内容太多不截图说明了,自己可以看一下
方式三:set
(显示所有变量,包括函数和 shell 局部变量)
set
四、删除环境变量:unset
基本语法
unset 变量名
变量将从当前 shell 中被移除。
📌 注意:unset
不能删除只读变量(如 PATH、HOME)。
五、常见系统环境变量及其作用
变量名 | 作用说明 | 示例 |
---|---|---|
PATH | 系统查找可执行命令的路径 | /usr/local/bin:/usr/bin:/bin |
HOME | 当前用户的主目录路径 | /home/username |
USER | 当前用户名 | root |
SHELL | 当前使用的 shell 路径 | /bin/bash |
LANG | 当前语言编码 | zh_CN.UTF-8 |
PWD | 当前工作目录 | /home/user/project |
OLDPWD | 上一个工作目录 | /home/user |
HOSTNAME | 主机名 | ubuntu-server |
EDITOR | 默认文本编辑器 | vim |
HISTSIZE | 历史命令条数 | 1000 |
六、环境变量与 Shell 脚本的结合
示例脚本一:动态设置变量并使用
#!/bin/bash
export LOG_DIR="/var/log/myapp"
mkdir -p $LOG_DIR
echo "日志目录已创建在:$LOG_DIR"
再说一次这里设置 $LOG_DIR
变量只对当前 shell 和子 shell 有效
执行上述脚本,你会发现 echo $LOG_DIR
啥也没有输出,因为终端执行的shell是当前脚本的父 shell,所以不生效
使用source
命令临时的在当前 Shell 会话中生效,关闭终端后失效
unset 删
除变量也是这个原理
现在是不是明白了许多呢!!!😂
示例脚本二:根据用户切换不同配置
判断当前用户是否为 root
,分别设置了一个环境变量 CONFIG_PATH
,指向不同的配置文件路径,便于程序根据用户身份加载对应的配置
#!/bin/bash
if [ "$USER" = "root" ]; then
export CONFIG_PATH="/etc/myapp/config_root"
else
export CONFIG_PATH="$HOME/.myapp/config"
fi
# 自动创建配置目录
mkdir -p "$(dirname "$CONFIG_PATH")"
echo "配置文件路径为:$CONFIG_PATH"
切换不同的用户来测试
七、环境变量使用中的注意事项
注意事项 | 说明 |
---|---|
$ 是引用变量的标志 | 使用 $VAR 来读取变量值 |
export 会让变量在子进程中有效 | 不使用 export 的变量无法被脚本继承 |
环境变量对系统行为影响巨大 | 修改 PATH 可能导致命令无法执行 |
写脚本时尽量不要硬编码路径 | 使用变量更灵活、可复用性更强 |
环境变量区分大小写 | PATH ≠ path |
八、什么时候需要用环境变量?
✅ 常见使用场景如下:
场景 | 用法 |
---|---|
修改默认命令路径 | 修改 PATH 变量 |
自动化脚本配置参数 | 脚本读取环境变量作为输入 |
用户个性化配置 | ~/.bashrc 或 ~/.profile 中设置变量 |
软件安装后增加新路径 | 添加到 PATH 中 |
Dockerfile 或 CI/CD 中传递变量 | 使用 ENV 或 export |
九、与配置文件的关系
常见环境变量配置文件:
文件 | 生效范围 | 说明 |
---|---|---|
~/.bashrc | 当前用户,每次启动 shell 时 | 适合 export 一些临时变量 |
~/.profile / ~/.bash_profile | 当前用户登录时生效 | 适合设置用户级变量 |
/etc/profile | 所有用户登录 shell 时生效 | 系统级变量配置文件 |
/etc/environment | 全局环境变量配置文件 | 不支持复杂语法,适合写静态变量 |
关键点
- 环境变量通过
export
设置,用unset
删除。 - 变量作用范围依赖于是否使用了
export
。 - 在脚本中使用变量比硬编码路径更灵活。
- 合理设置
PATH
可以提高开发效率,避免执行失败。 - 常见环境变量如
PATH
、HOME
、USER
非常重要,了解其意义有助于系统调试与自动化开发。
如果你看到这里,说明你真的很认真地在学习 Linux Shell 编程👏。
本系列内容将持续更新,包括脚本实战、渗透自动化、系统管理技巧等干货,适合:
- ✅ Linux 初学者
- ✅ 运维 / 安全从业者
- ✅ 编程爱好者与脚本自动化爱好者