用于循环的shell,具有多变量

时间:2016-09-26 15:09:13

标签: bash shell loops

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

谢谢

1 个答案:

答案 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