【问题标题】:shell for in loop with multible variable [duplicate]带有多个变量的循环shell [重复]
【发布时间】:2016-09-26 15:09:13
【问题描述】:

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

谢谢

【问题讨论】:

  • 可以想象,您在这里可能有一个实际上是主题的问题,但现在它有点隐蔽,并且绝对不能被其他任何人重现(因为要运行您的代码,我们需要拥有一个具有相同 DNS 配置和 IP 地址的系统)。如果由于重复而关闭的问题没有帮助,请尝试创建一个Minimal, Complete, Verifiable Example——其他人可以运行代码来查看您的问题,即使他们没有相同的 IP/主机/接口配置。跨度>
  • 如果您无法弄清楚如何重写问题以便其他人可以测试他们的答案,请考虑尝试为您的底层 bash 问题创建一个与主机名、IP 无关的测试用例地址等——毕竟有很多方法可以锻炼for 循环;这样做也将使您的 bash 语言问题更加清晰,因为它与您仅部分描述的更大上下文分开。如果您进行这样的重写,请@-通知我,我将反转关闭作为欺骗。

标签: bash shell loops


【解决方案1】:

假设您的两个数组 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

【讨论】:

  • 我认为我的问题是,$HOSTNAMES 不是数组。里面只有一个名字:/
  • 那你需要先弄清楚。一旦你这样做了,上面的代码应该可以工作,或者至少给你一个在一个循环中迭代多个数组的方法的例子。
猜你喜欢
  • 1970-01-01
  • 2014-06-12
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
相关资源
最近更新 更多