0

我正在编写一个小型 bash 脚本,它将查找任何给定域的 MX 记录,然后打印出主机名、IP 地址和 IP 地址的反向地址。我能够成功地将每个主机名、IP 和反向地址存储到 3 个数组中:

$MXHOSTS[@]
$MXIPS[@]
$MXRHOST[@]

每个都包含相同数量的值,并取决于域有多少 MX 记录。然后我想做的是打印出一行,其中包含所有三个数组中的数据,用于数组中的值的数量。

我怎么能呢。创建一个新数组,使用此数据或 b 将 3 个数组压缩为 1。使用 echo 从所有三个数组中打印出数据?

例子:

$MXHOSTS[0] = aspmx.l.google.com.
$MXIPS[0] = 74.125.129.27
$MXRHOST[0] = ia-in-f27.1e100.net.

从那以后,我想打印出这个:

aspmx.l.google.com。:: 74.125.129.27 :: ia-in-f27.1e100.net。

对于每个 MX 记录,它会像这样运行:

[~/scripts]# ./whomails google.com
aspmx.l.google.com. :: 74.125.129.27 :: ia-in-f27.1e100.net.
alt1.aspmx.l.google.com. :: 74.125.129.27 :: qe-in-f27.1e100.net.

ETC..

到目前为止,我已经尝试了几种不同的方法,主要是使用 for 循环,但是如果域有多个 MX 记录,它将打印出所有可能的组合。只有一个 MX,它工作正常。

目前我正在使用以下内容,但这给了我所有可能的组合:

for hosts in "${MXHOSTS[@]}"; do
    for ips in "${MXIPS[@]}"; do
        for rhosts in "${MXRHOSTS[@]}"; do
            echo "$hosts :: $ips :: $rhosts"
        done
    done
done

如何让它只打印相应的数组值,例如 [1-n] 而不是 [@]*[@]*[@]?

4

1 回答 1

0

我不确定我是否得到了你想要的,但如果所有数组都有相同的大小,你可以简单地用一个整数索引它们:

for (( i = 0; i < ${#array1[@]}; ++i )); do
    ${array1[$i]}
    ${array2[$i]}
    ...
    ${arrayn[$i]}
done
于 2013-05-02T16:46:28.860 回答