在for循环(bash)中使用命令行参数

在for循环(bash)中使用命令行参数,bash,for-loop,arguments,Bash,For Loop,Arguments,我正在尝试编写一个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

我正在尝试编写一个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 i in {2..5}
给你一个2,3,4和5的循环。但是它不起作用

如果我在循环中回显$ip并将其作为

reverselookup.sh 192.168.10 21 50
它给了我

{21..50}

有人知道这是否可行吗? 还是我必须重新考虑我的方法


提前感谢。

大括号扩展无法处理变量,因为它是在变量扩展之前执行的。您可以改为使用c样式的for循环:

for ((ip=$2; ip<=$3; ip++))
do
    ....
done

for((ip=$2;ip您可以使用
seq
替换

for ip in {$2..$3}
说:


您可以使用seq命令(coreutils的一部分)生成列表;如下所示

for ip in $(seq $2 $3)
do
    host $1.$ip | grep pointer
done

请参阅的说明以了解您键入的内容不起作用的原因。seq命令可能比c样式循环更具可移植性。缺点是它将创建一个额外的进程,并且迭代次数受命令缓冲区大小的限制。感谢您提供的信息以及您的方法,但因为这里的用例最多为2这不应该是个问题。如果这是错误的,请纠正我。
for ip in $(seq $2 $3)
do
    host $1.$ip | grep pointer
done