You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Shell脚本基于给定模板生成properties配置文件

这里有两种实用的Shell脚本方案来实现你的需求,都能生成带分区(dev、qa等)的config.properties配置文件,完全匹配你给出的示例格式:

方案一:直接在脚本中定义配置生成

这种方式不需要额外模板文件,所有配置都在脚本里维护,适合结构简单、变动不频繁的场景:

#!/bin/bash

# 指定输出的配置文件路径
OUTPUT_FILE="config.properties"

# 先清空文件(如果已存在),避免残留旧内容
> "$OUTPUT_FILE"

# 用关联数组存储每个环境的配置键值对,清晰直观
declare -A dev_config=(
    ["JDBC_URL"]="jdbc:h2:mem:mem_test;MODE=Oracle"
    ["JDBC_USERNAME"]=""
    ["JDBC_PASSWORD"]=""
    ["SERVICE_ENDPOINT"]="http://localhost:8080/Central/api/AppService"
)

declare -A qa_config=(
    ["JDBC_URL"]="jdbc:oracle:thin:@qa-oracle:1521:qa"
    ["JDBC_USERNAME"]="qauser"
    ["JDBC_PASSWORD"]="qapass"
    ["SERVICE_ENDPOINT"]="http://qa.example.com/Central/api/AppService"
)

# 封装一个复用函数,负责把单个环境的配置格式写入文件
write_env_config() {
    local env_name=$1
    declare -n config=$2  # 引用传入的关联数组

    # 写入环境分区头
    echo "[$env_name]" >> "$OUTPUT_FILE"
    # 遍历配置键值对写入
    for key in "${!config[@]}"; do
        echo "$key = ${config[$key]}" >> "$OUTPUT_FILE"
    done
    echo "" >> "$OUTPUT_FILE"  # 环境之间加空行,提升可读性
}

# 生成各个环境的配置
write_env_config "dev" dev_config
write_env_config "qa" qa_config

echo "✅ 配置文件 $OUTPUT_FILE 已生成完成!"

使用说明:

  1. 将脚本保存为generate_config.sh
  2. 赋予执行权限:chmod +x generate_config.sh
  3. 运行脚本:./generate_config.sh,就能得到目标配置文件

如果要添加新环境(比如prod),只需要新增一个关联数组存储prod的配置,再调用一次write_env_config函数即可。


方案二:基于模板文件生成

这种方式把配置结构和实际值分离,模板文件负责定义格式,脚本负责替换变量,适合需要频繁调整配置结构的场景:

第一步:创建模板文件config.template

先写好配置的结构,用{{变量名}}作为占位符:

[dev]
JDBC_URL = {{DEV_JDBC_URL}}
JDBC_USERNAME = {{DEV_JDBC_USERNAME}}
JDBC_PASSWORD = {{DEV_JDBC_PASSWORD}}
SERVICE_ENDPOINT = {{DEV_SERVICE_ENDPOINT}}

[qa]
JDBC_URL = {{QA_JDBC_URL}}
JDBC_USERNAME = {{QA_JDBC_USERNAME}}
JDBC_PASSWORD = {{QA_JDBC_PASSWORD}}
SERVICE_ENDPOINT = {{QA_SERVICE_ENDPOINT}}

第二步:编写替换脚本generate_config.sh

#!/bin/bash

# 定义模板文件和输出文件路径
TEMPLATE_FILE="config.template"
OUTPUT_FILE="config.properties"

# 先检查模板文件是否存在
if [ ! -f "$TEMPLATE_FILE" ]; then
    echo "❌ 错误:模板文件 $TEMPLATE_FILE 不存在,请先创建!"
    exit 1
fi

# 定义每个占位符对应的实际值
DEV_JDBC_URL="jdbc:h2:mem:mem_test;MODE=Oracle"
DEV_JDBC_USERNAME=""
DEV_JDBC_PASSWORD=""
DEV_SERVICE_ENDPOINT="http://localhost:8080/Central/api/AppService"

QA_JDBC_URL="jdbc:oracle:thin:@qa-oracle:1521:qa"
QA_JDBC_USERNAME="qauser"
QA_JDBC_PASSWORD="qapass"
QA_SERVICE_ENDPOINT="http://qa.example.com/Central/api/AppService"

# 使用系统自带的envsubst工具替换模板中的变量
envsubst < "$TEMPLATE_FILE" > "$OUTPUT_FILE"

echo "✅ 配置文件 $OUTPUT_FILE 已从模板生成完成!"

使用说明:

  1. 确保envsubst工具已安装(大部分Linux发行版默认自带,Debian/Ubuntu可以用apt install gettext安装)
  2. 赋予脚本执行权限后运行,就能生成目标配置文件

额外提示:

  • 如果你的密码包含特殊字符(比如$、!),记得用单引号包裹变量值,避免Shell解析出错
  • 方案一中的关联数组需要Bash 4.0及以上版本支持,如果是旧版本Bash,可以改用key=value的普通变量组合来实现
  • 两种方案都可以根据需求扩展,比如从外部文件读取配置、批量生成多个环境等

内容的提问来源于stack exchange,提问作者Srishti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:28:25