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

如何编写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 "配置已更新完成!"

原脚本的问题说明

  1. sed命令语法错误:原脚本的sed -i "s/${DATABASE_IP}" ~/.env缺少替换的目标模式和新值,sed的替换标准格式是s/旧内容/新内容/,这里写法完全不符合要求。
  2. 匹配范围不准确:仅替换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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:52:39