3

我正在尝试编写一个 bash 脚本,该脚本应该对一系列 IP 地址执行反向 DNS 查找。这个想法是提供网络(前 3 个八位字节)为 1 美元,要检查的范围的开始为 2 美元,所述范围的结束为 3 美元。

所以我最终得到:

#!/bin/bash
if [ $# -ne 3 ]
then
    echo "[*] Usage: reverselookup.sh [Network (x.x.x)] [start of range (y)]  [end of range (z)]"
    exit 1
fi

for ip in {$2..$3}
do
    host $1.$ip | grep pointer
done

现在我认为这将使用 bash for 循环中的正常序列操作,例如

for i in {2..5}

给你一个 2、3、4 和 5 的循环。但是它不起作用。

如果我在循环中回显 $ip 并运行它,例如

reverselookup.sh 192.168.10 21 50

它向我展示了

{21..50}

有谁知道是否有可能使这项工作?还是我必须重新考虑我的方法?

提前致谢。

4

3 回答 3

6

你可以seq用来替换

for ip in {$2..$3}

说:

for ip in $(seq $2 $3)
于 2013-09-24T07:30:22.663 回答
4

大括号扩展不适用于变量,因为它是在变量扩展之前执行的。您可以改用 c 样式的 for 循环:

for ((ip=$2; ip<=$3; ip++))
do
    ....
done
于 2013-09-24T07:25:40.220 回答
3

您可以使用 seq 命令(coreutils 的一部分)来生成列表;像这样

for ip in $(seq $2 $3)
do
    host $1.$ip | grep pointer
done
于 2013-09-24T07:30:37.683 回答