我正在尝试编写一个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}
有谁知道是否可以使这项工作成功? 或者我是否需要重新考虑我的appraoch?
提前致谢。
答案 0 :(得分:6)
您可以使用seq
替换
for ip in {$2..$3}
说:
for ip in $(seq $2 $3)
答案 1 :(得分:3)
Brace扩展不适用于变量,因为它是在变量扩展之前执行的。您可以使用c风格的循环代替:
for ((ip=$2; ip<=$3; ip++))
do
....
done
答案 2 :(得分:3)
您可以使用seq命令(coreutils的一部分)生成列表;像这样
for ip in $(seq $2 $3)
do
host $1.$ip | grep pointer
done