Shell工程化:配置化脚本

本文最后更新于 2026年7月9日 上午

Shell工程化:配置化脚本

一、为什么要使用配置文件

在初学阶段,很多脚本会将服务器 IP、用户名、端口等信息直接写在代码中,这种方式称为硬编码(Hard Code)

例如:

1
2
3
SERVER_IP="192.168.1.100"
SERVER_USER="root"
SERVER_PORT="22"

当配置发生变化时,需要修改脚本源码,不仅维护成本高,还容易引入新的错误。

工程化开发应遵循代码负责逻辑,配置负责参数的原则,实现代码与配置解耦。

二、创建配置文件

通常将配置独立存放在 .conf 文件中,例如:

1
2
3
4
5
6
# config/app.conf

SERVER_IP="192.168.1.100"
SERVER_USER="root"
SERVER_PORT="22"
LOG_DIR="./logs"

脚本中通过 source 加载配置:

1
source config/app.conf

或:

1
. config/app.conf

加载完成后,可直接使用配置变量:

1
2
echo "$SERVER_IP"
echo "$SERVER_USER"

三、推荐项目目录结构

工程项目建议采用统一目录结构:

1
2
3
4
5
6
7
8
project/
├── config/
│ ├── app.conf
│ ├── db.conf
│ └── ssh.conf
├── logs/
├── scripts/
└── backup/

不同配置按功能分类存放,便于维护和扩展。

四、加载与校验配置

推荐先定义配置文件路径,再统一加载。

1
CONFIG_FILE="./config/app.conf"

加载前应检查文件是否存在:

1
2
3
4
5
6
if [ ! -f "$CONFIG_FILE" ]; then
echo "配置文件不存在"
exit 1
fi

source "$CONFIG_FILE"

进一步可封装为函数:

1
2
3
4
load_config() {
[ ! -f "$CONFIG_FILE" ] && exit 1
source "$CONFIG_FILE"
}

五、配置变量规范

建议所有配置变量采用全大写加下划线命名,例如:

1
2
3
4
SERVER_IP
SERVER_PORT
LOG_DIR
BACKUP_DIR

避免使用无意义变量名:

1
2
3
a
ip
test1

清晰的命名有助于后期维护。

六、配置默认值与校验

对于可选配置,可设置默认值:

1
PORT=${SERVER_PORT:-22}

表示当 SERVER_PORT 为空时,默认使用 22

对于关键配置,应进行非空校验:

1
2
3
4
if [ -z "$SERVER_IP" ]; then
echo "SERVER_IP不能为空"
exit 1
fi

工程项目通常封装统一校验函数:

1
2
3
4
validate_config() {
[ -z "$SERVER_IP" ] && exit 1
[ -z "$SERVER_USER" ] && exit 1
}

七、多环境配置管理

大型项目通常需要区分不同运行环境,例如:

1
2
3
4
config/
├── dev.conf
├── test.conf
└── prod.conf

根据环境加载对应配置:

1
source config/prod.conf

无需修改业务代码即可切换环境,提高脚本复用性。

八、工程最佳实践

推荐所有 Shell 工程统一采用以下流程:

  1. 定义配置文件路径。
  2. 检查配置文件是否存在。
  3. 使用 source 加载配置。
  4. 校验关键配置项。
  5. 使用默认值处理可选参数。
  6. 保持代码与配置完全分离。

这种方式能够显著提高脚本的可维护性、可扩展性,并方便部署到不同服务器或运行环境。


Shell工程化:配置化脚本
http://example.com/1d6d8b57.html
作者
SHAO
发布于
2026年7月9日
许可协议