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