将bash中多个可变大小数组的数据提取到一行上

时间:2013-05-02 16:38:10

标签: arrays bash for-loop

我正在编写一个小的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.

等。

到目前为止,我尝试了一些不同的方法,主要是使用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]而不是[@] * [@] * [@]?

1 个答案:

答案 0 :(得分:0)

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

for (( i = 0; i < ${#array1[@]}; ++i )); do
    ${array1[$i]}
    ${array2[$i]}
    ...
    ${arrayn[$i]}
done