
У меня есть вопрос Я хочу запустить скрипт, который сканирует мою сеть и который я могу видеть с устройствами, которые находятся в моей сети. Я хочу вставить некоторые аргументы также в скрипт
Когда я запускаю скрипт:
./ping.sh --xx-YY 20 50
Выход:
192.168.0.20 is down
192.168.0.21 is up
..................................
192.168.0.50 is up
the argument -t , counts 200 by the last digit for ex. ./ping.sh -t 20 output: 192.168.0.220 is up
Но моя проблема в аргументе --up en -mac, который я хочу, чтобы при запуске скрипта ./ping.sh --up отображались только работающие компьютеры. А аргумент -mac также является проблемой, когда я запускаю скрипт, я хочу отображать IP-адреса и MAC-адреса после того, как компьютеры будут пропингованы**
Может ли кто-нибудь помочь мне с этими двумя аргументами?
Это мой сценарий.
#!/bin/bash
while [[ -n "$@" ]]
do
case "$1" in
-h|--help)
Extension=1
shift
;;
-XX-YY)
Extension=2
shift
min=$1
shift
max=$1
shift
;;
--up)
Extension=3
shift
end=$1
shift
;;
-t)
Extension=4
shift
count=$(($1+200))
shift
;;
esac
done
if [ "$Extension" -eq 1 ] ; then
echo "dit is de help"
fi
if [ "$Extension" -eq 2 ] ; then
for ((n=$min ; n<=$max ; n+=1))
do
ip=192.168.0.$n
if ping -c 1 -w 1 ${ip} > /dev/null 2> /dev/null >> logping.txt; then
echo "${ip} is up"
else
echo "${ip} is down"
fi
done
fi
if [ "$Extension" -eq 3 ] ; then
ip=192.168.0.$end
if ping -c 1 -w 1 ${ip} > /dev/null 2> /dev/null >> /logping.txt; then
echo "${ip} is up"
fi
fi
if [ "$Extension" -eq 4 ] ; then
ip=192.168.0.$count
if ping -c 1 -t 1 ${ip} > /dev/null 2> /dev/null >> logping.txt; then
echo "${ip} is up"
else
echo "${ip} is down"
fi
fi
решение1
Давайте наведем порядок.
Случай №5: -mac
или, лучше сказать,--ip
В строках "case statement" вашего дела № 5 нет никаких проблем.
Тем не менее, я настоятельно рекомендую вам изменить название опции с-mac
к--ip
. MAC-адрес и IP-адрес — это разные понятия, и в данном случае я думаю, ip
что это правильный вариант.
Вопрос стиля: даже если это не строгое правило, обычно используется одинарная, -
если следующий вариант состоит только из одной буквы, и двойная, --
если состоит более чем из одной буквы. Например, в вашем примере у вас есть -h
и --help
. (Исправьте даже --xx-YY
). Скрипты имеют тенденцию сохраняться во времени, и будет странно впоследствии увидеть его только с одним -
.
Возвращаясь к коду #5, вы можете использовать что-то похожее на:
if [ "$Extension" -eq 5 ] ; then
ip=192.168.1.$mac
if nmap -sP -n -r $ip | grep "is up" >/dev/null ; then
echo "${ip} is up"
fi
fi
Ошибки в этой попытке:
ip=192.168.0.$mac
определены на192.168.
0
.xxx
и в следующей строке не используется переменная $ip
, а вместо нее используется подсеть192.168.
1
.0/24
. Вложенный if... then fi
блок не закрывается с помощью fi
.
**Случай №3: --up
**
Если я правильно понял, вы хотите каким-то образом показать список всехвверххост в этой подсети. Поэтому вам не нужно указыватьконецпеременная дляИС, но вам следует просканировать всю подсеть 192.168.1.xxx
.
Вы можете использовать что-то вроде следующих команд
if [ "$Extension" -eq 3 ] ; then
sudo nmap -sP -n -r 192.168.1.0/24 | grep -E "Nmap scan|MAC Address:"
fi
Обновление: Ссылки о MAC-адресе