Gangmax Blog

Shell实现“取得当前机器IP并用其替换配置文件中的IP属性”

我在工作中遇到这样一个需求:运行于glassfish中的某个ear需要一个system property(对应于domain.xml中的配置),该property的值是当前机器的ip地址。由于我的机器每次重新启动被分配的ip是不同的,而我不想每次都手动先ifconfig取得ip地址再手工替换配置文件的内容,所以就想用shell脚本来实现该功能。

先看最终脚本的样子:

1
2
3
4
5
cd /home/me/java/glassfish/domains/domain1/config
now=`date +%Y%m%d-%H%M%S | awk '{ print $1}'`
cp domain.xml domain.xml.bak.$now
ip=`ifconfig | grep 'inet 地址:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`
sed -i "s/123\.123\.123\.[0-9]\{1,3\}/$ip/g" domain.xml

依次解释:

第一行:就是切换目录,没什么说的;

第二行:取得当前时间的格式化字符串,如“20100722-122409”;

第三行:备份当前的domain.xml文件;

第四行(技术含量较高):从执行ifconfig命令的结果中取得当前ip地址,赋值给ip变量(我使用的是中文ubuntu所以ifconfig结果中也是中文:-));

第五行(技术含量最高):用sed命令,在domain.xml中查找之前已经有ip的内容,替换为当前ip的内容(由于在我机器上ip再变也只是最后一节的变化,所以正则表达式中前三节的内容都是固定的)。

Comments