2013-09-24 2 views
2

Я пытаюсь написать сценарий bash, который должен выполнять обратный поиск DNS по диапазону IP-адресов. Идея состоит в том, чтобы обеспечить сеть (первые 3 октета) как $ 1, начало диапазона, который будет проверяться как $ 2, а конец указанного диапазона - $ 3.Использование аргументов командной строки in for loop (bash)

Так что я закончил с:

#!/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 

Теперь я думал, что это будет использовать нормальную работу последовательность в Баш для петель, как в

for i in {2..5} 

дает петлю с 2, 3 , 4 и 5. Однако это не сработает.

Если я повторяю $ ip внутри цикла и запускаю его, например.

reverselookup.sh 192.168.10 21 50 

он представляет меня

{21..50}

Кто-нибудь знает, можно ли сделать эту работу? Или мне нужно пересмотреть мою оценку?

Заранее спасибо.

+0

Смотрите описание [Brace расширения] (http://www.gnu.org/software/bash/manual/bash.html#Brace-Expansion), чтобы понять, почему то, что вы типа не будет Работа. –

ответ

6

Вы можете использовать seq заменить

for ip in {$2..$3} 

Say:

for ip in $(seq $2 $3) 
+1

Команда seq, вероятно, более переносима в цикле c-стиля. Недостатком является то, что он создаст дополнительный процесс и количество итераций ограничено размером командного буфера. – user000001

+0

Спасибо за информацию, а также за ваш подход, но так как здесь используется не более 255 итераций, это не должно быть проблемой. Пожалуйста, поправьте меня, если это неправильно. – fragman

+1

@fragman Это не проблема. – devnull

3

Расширение скобки не будет работать с переменными, поскольку оно выполняется перед расширением переменной. Вы можете использовать кесарево стиль для цикла вместо:

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

Вы можете использовать команду Seq (часть Coreutils) для создания списка; как так

for ip in $(seq $2 $3) 
do 
    host $1.$ip | grep pointer 
done 
Смежные вопросы