
Tengo una pregunta. Quiero ejecutar un script que escanee mi red y que pueda ver con dispositivos activos en mi red. Quiero pegar algunos argumentos también en el script.
Cuando ejecuto el script:
./ping.sh --xx-YY 20 50
Producción:
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
Pero mi problema es el argumento --up en -mac que quiero cuando ejecuto el script ./ping.sh --up , solo muestra las computadoras que están activas Y el argumento - mac también es un problema cuando ejecuto el script Quiero mostrar las direcciones IP y la dirección MAC después de que las computadoras hagan ping**
¿Alguien puede ayudarme con estos 2 argumentos?
Este es mi guión.
#!/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
Respuesta1
Hagamos un poco de orden.
Caso #5: -mac
o, mejor,--ip
No hay problemas en las líneas de "declaración de caso" de su caso n.° 5.
Sin embargo, le recomiendo encarecidamente que cambie el nombre de la opción de-mac
a--ip
. Dirección Mac y Dirección IP son conceptos diferentes y en este caso creo que ip
es el apropiado.
Cuestión de estilo: aunque no es una regla estricta es común el uso de un simple -
si la siguiente opción está compuesta por una sola letra, y el uso de un doble --
si está compuesta por más de una letra. Por ejemplo, en su mismo ejemplo tiene -h
y --help
. (Corrija incluso el --xx-YY
). Los guiones tienden a perdurar en el tiempo y será extraño después verlo con uno solo -
.
Volviendo al código del n.° 5, puedes usar algo similar 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
Errores en ese intento:
ip=192.168.0.$mac
se define en192.168.
0
.xxx
y la siguiente línea no se usa la variable $ip
, y en su lugar se usa la subred192.168.
1
.0/24
. El bloque anidado if... then fi
no está cerrado por un archivo fi
.
**Caso #3: --up
**
Si entiendo bien lo que quieres decir, querrás mostrar de alguna manera la lista de todos losarribahost en esa subred. Por lo que no es necesario especificar elfinvariables para elIP, pero deberías escanear toda la subred 192.168.1.xxx
.
Puedes usar algo como los siguientes comandos
if [ "$Extension" -eq 3 ] ; then
sudo nmap -sP -n -r 192.168.1.0/24 | grep -E "Nmap scan|MAC Address:"
fi
Actualización: Referencias sobre la dirección MAC