在my question我学习使用循环,并帮助我最终为软件的多个实例安装脚本。非常感谢你:))
现在我尝试使用sed自动设置配置文件。为此,我需要循环中的多变量。
我从系统中读取了IP地址和IP的主机名(PTR)
IPADDR=`ifconfig | awk '{print $2}' | egrep -o '([0-9]+\.){3}[0-9]+'|grep -v 127.0.0.1`
for ipaddr in ${IPADDR[@]}; do echo $ipaddr; done
for iphost in ${IPADDR[@]}; do host $iphost |grep pointer | awk '{print $NF}' RS='.\n'; done
我的剧本知道,有3个IP,知道IP地址和主机名。
IP(3)的数量现在是我的001 002 003.运行良好。
如果我想用sed编辑配置文件,我需要3变量才能执行此操作。
命令anyname-001 -some -parameter在我的例子中是路径的副本。我的路径现在是
/ etc / anyname-001,/ etc / anyname-003和/ etc / anyname-003
使用sed我还需要3个IP地址和3个主机名。
sed -i 's/IPADDR/'${ipaddr}'/g' /etc/anyname-${number}/config.cfg
sed -i 's/HOSTNAME/'${hostname}'/g' /etc/anyname-${number}/config.cfg
如何在同一时间将所有变量带到我的循环中。尝试很多东西。我找到了嵌套循环,但它不起作用
001>> IP:a.a.a.a>>主机名aaa.aaa.aa
002>> IP:b.b.b.b>>主机名bbb.bbb.bb
003>> IP:c.c.c.c>>主机名ccc.ccc.cc
谢谢
答案 0 :(得分:0)
假设您的数组HOSTNAME和IPADDR的长度相同,那么您可以在一次运行中通过索引遍历其元素。
使用数组变量中的“#”计算数组的长度,例如:
echo ${#HOSTNAME[@]}
所以,整体而言你的代码看起来像是:
count=${#HOSTNAME[@]}
for (( i=0; i<${count}; i++ ));
do
echo ${HOSTNAME[$i]};
echo ${IPADDR[$i]};
((j=i+1));
sed -i 's/IPADDR/'${IPADDR[$i]}'/g' /etc/anyname-${j}/config.cfg
sed -i 's/HOSTNAME/'${HOSTNAME[$i]}'/g' /etc/anyname-${j}/config.cfg
done