Bash один лайнер, чтобы перечислить все занятые IP-адреса в CIDR? - PullRequest
0 голосов
/ 05 марта 2020

Мне нужен Bash один вкладыш, который может печатать все занятые IP-адреса в CIDR, который я ему даю, и мне не удалось найти, как это сделать. У меня есть скрипт, который может выполнить это, но мне не удалось заставить его работать как один лайнер. Сценарий:

#!/bin/sh
pingf(){
    if ping -w 2 -q -c 1 10.5.99."$1" > /dev/null ;
    then 
        printf "IP %s is up\n" 10.5.99."$1"
    fi
}

main(){

    NUM=1
    while [ $NUM -lt 255  ];do 
        pingf "$NUM" &
        NUM=$(expr "$NUM" + 1)
    done
    wait
}
main

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 05 марта 2020

Используйте for l oop с выражением последовательности.

Замените оператор if на &&, чтобы объединить ping и printf.

for ip in 10.5.99.{1..255}; do ping -w 2 -q -c 1 "$ip" >/dev/null && printf "IP %s is up\n" "$ip" & done
wait

Выражения последовательности являются расширением bash, поэтому вам нужно изменить #!/bin/sh на #!/bin/bash.

Обратите внимание, что это просто проверка одного / 24, а не произвольного блока CIDR. Я не могу придумать способ обобщить это для блоков CIDR в одну строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...