Comprobar si es una IP correcta o no en Bash (función para validar IP)

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

Comparte para difundir

Si te ha gustado nuestro contenido ahora puedes ayudar a difundirlo en las redes sociales de manera sencilla usando los siguientes botones:

Envía
Pinea
Print

8 comentarios

  1.   ezitoc dijo

    Perfecto! Muy interesante. Muchas gracias.

    1.    KZKG^Gaara dijo

      Gracias a tí por pasarte y comentar 😀

  2.   taregon dijo

    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 🙂

    1.    KZKG^Gaara dijo

      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!!

      1.    taregon dijo

        jeje, si es verdad, aterra pensarlo, pero el planteamiento existe 😛

  3.   Alejandro Mora dijo

    Ya funciona, sólo toca correrlo ./script y no sh script.

    1.    KZKG^Gaara dijo

      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 😉

  4.   Anathur dijo

    Holas, gracias por vuestra ayuda me sirvio de mucha ayuda.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.