bash循环遍历两个列表并使主机名和IP对应

时间:2017-01-13 21:59:13

标签: bash

我正在尝试在bash脚本的输出中组合两个列表。一个列表是机器名称列表。另一个列表是IP地址列表。然后它输出它是否可以telnet到端口3389上的IP.它正在清点哪个Windows机器正在该端口上响应。

以下是我提出的建议:

#!/bin/bash
file1="machine_list.txt"
file2="ip_list.txt"
HOSTS=$(cat "$file1")
IP=$(cat "$file2")

for h in $HOSTS
 do
for i in $IP
do
        echo "checking RDP port on host: $h"
        /usr/bin/telnet $i 3389
        echo
        sleep 2
done
done

成功连接的输出应如下所示:

checking RDP port on host: USAMZADP3000
Trying 10.1.233.65...
Connected to 10.1.233.65.
Escape character is '^]'

但它真正做的是循环相同的机器名称并为同一机器名称提供不同的IP地址。我希望机器名称和IP地址准确并且具有1比1的相关性。

我做错了什么?我怎样才能得到我想要的结果?

1 个答案:

答案 0 :(得分:2)

看起来您想要并行读取这两个文件。由于您的循环是嵌套的,因此您的代码将获取一个计算机名称,然后读取整个IP文件,然后获取第二个计算机名称并读取整个IP文件等。您可以使用一个{{1}同时读取这两个文件}循环。

while

您可能会发现此related question有用。