1.命令概述
export命令是Linux Bash shell的核心组成部分。它允许将创建的变量或函数“共享”出去,使得其他程序或从当前终端启动的新shell能够使用这些变量和函数。
默认情况下,变量仅存在于创建它们的shell中。当使用export后,变量就变成了环境变量,这意味着它会传递给所有子进程。
2.环境变量是什么?
环境变量是系统范围的变量,会被所有派生的子进程和shell继承。它们允许我们自定义系统的工作方式以及系统上应用程序的行为。
常见环境变量示例:
- SHELL - 当前用户shell的路径(如bash或zsh)
3.语法结构
基本语法格式:
export [-f] [-n] [name[=value] …]
查看已导出变量:
export -p
参数说明:
-n - 移除指定变量的导出属性(变量仍在当前shell中定义,但不会被子进程继承)
4.export命令详细用法
4.1 查看环境变量
# 方法一:查看所有已导出变量
export -p
# 或简写
export
输出示例:
declare -x PATH=".:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin:/home/oracle/.local/bin:/home/oracle/bin:/oracle/app/oracle/product/19c/db_1/bin"
declare -x HOME="/home/oracle"
declare -x LANG="en_US.UTF8"
# 方法二:查看特定环境变量
[oracle@yyzcdb81 ~]$ echo$PATH
.:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin:/home/oracle/.local/bin:/home/oracle/bin:/oracle/app/oracle/product/19c/db_1/bin
[oracle@yyzcdb81 ~]$ echo$home
[oracle@yyzcdb81 ~]$
# 方法三:查看所有环境变量
1)专用于查看环境变量
printenv
2)env命令查看环境变量
env
3)set命令查看所有变量(含局部变量)
set
4.2 创建和导出变量
(1)直接创建并导出
export DATABASE_NAME="orcl"
export ORACLE_HOME="/u01/app/oracle"
(2)先创建后导出
# 定义局部变量
APP_PATH="/opt/myapp"
# 导出为环境变量
export APP_PATH
(3)PATH变量的特殊操作
# 向PATH添加新路径(推荐方式)
export PATH="${PATH}:/usr/local/custom/bin"
# 添加路径到最前面(优先搜索)
export PATH="/usr/local/custom/bin:${PATH}"
# 避免重复添加
if [[ ":$PATH:" != *":/usr/local/custom/bin:"* ]]; then
export PATH="${PATH}:/usr/local/custom/bin"
fi
4.3变量的命名规范
# 推荐使用大写字母,多个单词用下划线连接
export DB_SERVER="192.168.1.100"
export MAX_CONNECTIONS=100
export JAVA_HOME="/usr/lib/jvm/java-11"
# 不推荐的写法(可能引起混淆)
export myvariable="value"# 小写,不推荐
export myVariable="value"# 驼峰式,不推荐
4.4导出函数到子进程
# 定义函数
start_db() {
echo"Starting database..."
sqlplus / as sysdba << EOF
startup
exit
EOF
}
# 导出函数
export -f start_db
# 在子Shell中测试
bash -c "start_db"
4.5移除变量
只移除导出属性,变量值仍保留在当前Shell:
export -n VARIABLE
从当前Shell和子进程中彻底删除变量(完全删除变量,推荐):
unset VARIABLE
使用-u选项删除(较少用):
export -u VARIABLE
5.永久环境变量配置实战
导出的变量不是永久性的,仅在当前会话期间有效。要使环境变量在所有会话中持久存在,需要将其添加到shell配置文件中。
5.1 配置文件层次结构
系统级别(所有用户生效)
├── /etc/environment # 最简单的环境变量设置
├── /etc/profile # 系统全局配置
└── /etc/profile.d/*.sh # 模块化配置目录
用户级别(仅当前用户生效)
├── ~/.bash_profile # 登录Shell配置(优先)
├── ~/.bashrc # 交互式Shell配置
└── ~/.profile # 兼容性配置
5.2 配置实例
以下是一个Oracle数据库环境的实际配置示例:
# ~/.bash_profile 配置文件
# 加载.bashrc中的别名和函数
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# Oracle数据库专用配置
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c/db_1
export ORACLE_SID=yyzcdb
# 字符集和日期格式
export NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
# PATH配置
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
5.3 配置生效方法
# 立即生效(推荐)
source ~/.bash_profile
# 简写形式
. ~/.bash_profile
# 重启Shell
exec bash
6.最佳实践与排错
6.1 最佳实践
6.2 常见问题排错
(1)检查变量是否已导出
export -p | grep VARIABLE_NAME
(2)检查变量值是否正确
echo$VARIABLE_NAME
(3)检查配置文件是否正确加载
bash -x ~/.bash_profile # 调试模式执行
(4)确认变量在子进程中可用
bash -c 'echo $VARIABLE_NAME'
7.高级应用场景
7.1 条件环境变量设置
# 根据系统架构设置变量
if [ "$(uname -m)" = "x86_64" ]; then
export ARCH="64bit"
else
export ARCH="32bit"
fi
# 根据用户设置不同配置
if [ "$USER" = "oracle" ]; then
export ORACLE_ENV="production"
else
export ORACLE_ENV="development"
fi
7.2 脚本间变量传递
# script1.sh
export SHARED_DATA="important_info"
./script2.sh
# script2.sh
echo"Received: $SHARED_DATA"
8.总结
export命令是Linux系统管理和开发中不可或缺的工具,其主要功能包括:
关键原则:
通过合理使用环境变量,可以显著提高工作效率和系统管理能力。