2016-09-26 59 views
0

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 

我的剧本知道读,有AR 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 

我怎样才能使我的循环与所有变量在同一时间。 T尝试很多事情。我发现嵌套的循环,但它不能正常工作

001 >> IP:AAAA >>主机名aaa.aaa.aa

002 >> IP:BBBB >>主机名bbb.bbb.bb

003 >> IP:中交>>主机名ccc.ccc.cc

谢谢

+0

这是可以想象,你可能在这里有一个问题,这实际上是在话题上,但现在它已经被埋没了,并且绝对不能被任何人重现(因为运行你的代码,我们需要一个具有相同DNS配置的系统和IP地址)。如果这个问题因为重复而关闭不起作用,请尝试创建一个[Minimal,Complete,Verifiable Example](http://stackoverflow.com/help/mcve) - 别人可以运行的代码来查看您的代码问题,即使它们没有相同的IP /主机/接口配置。 –

+0

如果你很难找出如何重写问题以便其他人可以测试他们的答案,可以考虑尝试为你的基础bash问题创建一个与主机名,IP地址等无关的测试用例 - 这里有毕竟,有很多方法可以锻炼'for'循环;这样做也可以使你的bash语言问题更加清晰,把它与你仅仅部分描述的更大的背景分开。如果你做了这样的重写,@注意我,我会扭转近似的重复。 –

回答

0

假设两者的阵列主机名的长度和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 
+0

我想我的问题是,$ HOSTNAMES是没有数组。里面只有一个名字:/ – nbx

+0

然后你需要首先弄清楚。一旦你做了,上面的代码应该工作,或者给你至少一个循环遍历多个数组的方式的例子。 – sal