有人可以告诉我,我正在尝试用这个脚本做什么?这是我在这里的另一个问题的补充: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的经验几乎不存在。
答案 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.txt
和ip.txt
的行数相同;如果不是这样的话,这段代码的工作方式会略有不同,但如果这样的话,这两种行为都不是你想要的。