
Tenho uma dúvida: quero executar um script que verifique minha rede e que eu possa ver se os dispositivos estão ativos em minha rede. Quero colar alguns argumentos também no script
Quando executo o script:
./ping.sh --xx-YY 20 50
Saída:
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
Mas meu problema é o argumento --up en -mac que eu quero quando executo o script ./ping.sh --up , é apenas exibido os computadores que estão ativos E o argumento - mac também é um problema quando executo o script Quero exibir os endereços IP e o endereço MAC depois que os computadores fizerem ping **
Alguém pode me ajudar com esses 2 argumentos?
Este é o meu roteiro.
#!/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
Responder1
Vamos fazer alguma ordem.
Caso nº 5: -mac
ou, melhor,--ip
Não há problemas nas linhas de "declaração de caso" do seu caso nº 5.
Mesmo assim, sugiro fortemente que você altere o nome da opção de-mac
para--ip
. Endereço Mac e Endereço IP são conceitos diferentes e neste caso acho que ip
é o mais adequado.
Questão de estilo: mesmo que não seja uma regra estrita é comum o uso de um único -
se a opção seguinte for composta por apenas uma letra, e o uso de um duplo --
se for composto por mais de uma letra. Por exemplo, no seu mesmo exemplo você tem -h
e --help
. (Corrija até o --xx-YY
). Os scripts tendem a durar no tempo e será estranho vê-los com apenas um arquivo -
.
Voltando ao código nº 5, você pode usar algo semelhante a:
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
Erros nessa tentativa:
ip=192.168.0.$mac
é definido em192.168.
0
.xxx
e na linha seguinte não é usada a variável $ip
, mas sim a sub-rede192.168.
1
.0/24
. O if... then fi
bloco aninhado não é fechado por um fi
.
**Caso #3: --up
**
Se bem entendi o que você quer dizer, você quer mostrar de alguma forma a lista de todos osacimahost nessa sub-rede. Então você não precisa especificar ofimvariável para oPI, mas você deve verificar toda a sub-rede 192.168.1.xxx
.
Você pode usar algo como os seguintes comandos
if [ "$Extension" -eq 3 ] ; then
sudo nmap -sP -n -r 192.168.1.0/24 | grep -E "Nmap scan|MAC Address:"
fi
Atualização: Referências sobre endereço MAC