如何编写Shell脚本根据用户输入动态更新.env文件的IP和端口
完善.env配置更新的Shell脚本
以下是可以实现动态更新.env文件中SPRING_DATASOURCE_URL配置的完整脚本:
#!/bin/bash # 读取用户输入的数据库IP和端口 read -p "请输入数据库IP:" DATABASE_IP read -p "请输入数据库端口:" PORT # 使用sed命令替换.env文件中的IP和端口 # 正则匹配SPRING_DATASOURCE_URL行中的IP和端口部分,替换为用户输入的值 # 使用|作为sed分隔符,避免URL中/带来的转义问题 # -i.bak会生成原文件的备份(.env.bak),如果不需要备份可以去掉.bak sed -i.bak "s|SPRING_DATASOURCE_URL=jdbc:postgresql://[0-9.]*:[0-9]*/db_name|SPRING_DATASOURCE_URL=jdbc:postgresql://${DATABASE_IP}:${PORT}/db_name|" ~/.env echo "配置已更新完成!"
原脚本的问题说明
- sed命令语法错误:原脚本的
sed -i "s/${DATABASE_IP}" ~/.env缺少替换的目标模式和新值,sed的替换标准格式是s/旧内容/新内容/,这里写法完全不符合要求。 - 匹配范围不准确:仅替换IP会导致文件中所有出现该IP的内容被修改,必须精准定位
SPRING_DATASOURCE_URL这一行的IP和端口段。
关键逻辑解释
- 用
|作为sed分隔符:URL中包含大量/,若用/做分隔符需要转义,改用|能简化语法。 - 正则表达式
[0-9.]*匹配任意格式的IP地址(数字和点的组合),[0-9]*匹配任意数字组成的端口。 -i.bak参数:执行替换时自动生成原.env文件的备份(命名为.env.bak),无需备份可直接写-i。- 精准定位配置项:明确匹配
SPRING_DATASOURCE_URL=jdbc:postgresql://开头的行,避免误改其他配置。
内容的提问来源于stack exchange,提问作者Prakash Peram
相关产品推荐
相关产品推荐

