Este es otro tip que nos puede ayudar en determinadas situaciones. Hago este post más a modo recordatorio, pues sé que necesitaré esto en algún momento de nuevo jajaja.
Cuando estamos haciendo algún script en bash, y el usuario debe introducir una dirección IP, para posteriormente nosotros (el script) que haga algo usando esa dirección IP, ¿saben dónde podría fallar todo? … que el usuario NO introduzca una IP, que ponga cualquier tontería o una IP incompleta o algo así, los que programan saben a qué me refiero… pues se debe programar pensando en que hasta lo más absurdo sucederá O_O.
Precisamente para evitar esta situación, existen las funciones o métodos para validad una IP, o sea, para comprobar si el dato que el usuario introdujo es en realidad una IP o no.
Acá se las dejo:
function validar_ip()
{
local ip=$ipdudosa
local stat=1
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]];
then
OIFS=$IFS
IFS='.'
ip=($ip)
IFS=$OIFS
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
stat=$?
fi
return $stat
}
Cuando el usuario introduzca «algo», ese algo será el valor de la variable ipdudosa … el código sería:
echo " Inserte lo que desea comprobar si es una IP."
read "ipdudosa"
Y ahora indicaremos que valide el contenido o valor de ipdudosa con la anterior función, y esto comprobará si es una IP en realidad o no. Si es una IP lo dirá, si no es nos dirá que NO es una IP:
if validar_ip ipdudosa;
then echo "Sí, es una IP correcta :D";
else
echo "No, eso NO es una IP";
fi
El script completo se los dejo acá:
Función para Validar IP (ejemplo)
Miren bien que en el inicio declaro que es : #!/bin/bash … si ponen #!/bin/sh esto no funcionará, yo estuve 2 días casi completos batallando y protestando porque no me funcionaba la función, y era que tenía puesto sh en vez de bash jajaja.
Bueno nada más que agregar, existen funciones para esto en Python, Perl y otros idiomas… de hecho, esta que les muestro no es la única forma de valida IPs en bash, pero a mí me ha resultado muy bien por eso la comparto
Saludos
Perfecto! Muy interesante. Muchas gracias.
Gracias a tí por pasarte y comentar 😀
Estupendo! ahora a intentar adaptar esto “if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]];” para que detecte cuando una ipv6 se escribe mal…violento… o_0 el lio que a de ser meterle el HEXadecimal y sus 128bits.
Claro, esto es un caso hipotético que me plantíe 🙂
A IPv6 … joder, ni de broma lo hago… deja deja… si ni siquiera entiendo bien de qué va lo del IPv6 (funcionamiento), ni de broma intento validar una IP LOL!!
jeje, si es verdad, aterra pensarlo, pero el planteamiento existe 😛
Ya funciona, sólo toca correrlo ./script y no sh script.
Sip claro, si haces sh script lo intentará interpretar con sh … tendrías que hacer bash script para que fuese lo mismo que ./script.sh 😉
Holas, gracias por vuestra ayuda me sirvio de mucha ayuda.