迭代通过作为参数传递给python脚本的bash数组的最佳方法

时间:2016-06-07 16:46:28

标签: bash

有人可以告诉我,我正在尝试用这个脚本做什么?这是我在这里的另一个问题的补充:How to pass Bash variables as Python arguments

hostnames=hosts.txt

#sets zone as a string into $zone variable
zone="domain.local"

#stores text file into $ip variable
ip=ip.txt

#creates an array
declare -a ipArray

#puts all the contents of the ip.txt file into the ipArray array
ipArray=(`cat "$ip"`)

#increment variable used to access each value in the ipArray array
i=0

#reads the contents of the hosts.text file
while read -r host; do

  #for each host set the zone with the $zone variable
  #for each host set the record-key to the name of each hostname being passed in via the $host variable defined in while loop
  #for each host set the record-value to the current value of the ipArray array based on the index specified in the $i variable
  sudo dns_cli.py --action=delete --zone=$zone --record-type=A --record-key=$host --record-value=${ipArray[i]} >> dns_delete.log 2>&1

  #increment the $i variable by 1
  i=$((i+1))
done < hosts.txt

我运行了一些回声测试,这似乎是打印出我想要的,但我想要额外的输入,看看它是否有效。我基本上需要提供一个主机名和相关的IP地址,所以这是我想到的循环每个主机并在每次迭代时替换IP的唯一方法。

我也不知道我是否应该在引号中附上$ {ipArray [i]}部分。请原谅丑陋的代码,我对Bash的经验几乎不存在。

1 个答案:

答案 0 :(得分:2)

将值读入数组是没有意义的;您一次只使用数组中的一个值。只需同时读取主机文件和IP文件:

while read -r host
      read -r ip <&3;  do
  sudo dns_cli.py --action=delete --zone="$zone" --record-type=A --record-key="$host" --record-value="$ip" >> dns_delete.log 2>&1
done < hosts.txt 3< ip.txt >> dns_delete.log 2>&1

顺便说一下,这将适用于任何POSIX shell,而不仅仅是bash

我假设原作hosts.txtip.txt的行数相同;如果不是这样的话,这段代码的工作方式会略有不同,但如果这样的话,这两种行为都不是你想要的。