Validação de endereços IPv4
Função bem simples que valida endereços IPv4 sem a utilização de qualquer comando externo ao Bash!
Descrição
Função bem simples que valida endereços IPv4 sem a utilização de qualquer comando externo ao Bash!
#
# Funcao para validacao generica de enderecos IPv4.
# Boa Vista, Roraima - 11/01/2011
# Autor: Sandro Marcell <smarcell@myopera.com>
# Blog: http://my.opera.com/smarcell/blog/
#
# - Para utiliza-la basta passar como argumento o IP a ser validado e checar
# o codigo de retorno ($?) da funcao, em que zero representa IP valido e
# qualquer coisa diferente e IP invalido.
#
# - Caso a funcao apresente problemas com a sintaxe '+(...)', basta ativar a
# opcao 'extglob' como o comando 'shopt -s extglob'.
#
# Obs.: Testada no Bash v4.1.x
#
function validarIPv4() {
local retorno bkp_IFS octeto
retorno=0
bkp_IFS=$IFS
IFS='.'
set - $1
[ $# -ne 4 ] && { IFS=$bkp_IFS; return 1; }
for octeto; do
[[ $octeto != +([0-9]) || $octeto == +(0[0-9]*) || $octeto -gt 255 ]] && { retorno=2; break; }
done
IFS=$bkp_IFS
return $retorno
}
Um "one-liner" usando o (GNU) awk + ER que faz a mesma coisa:
$ echo 192.168.002.43 | gawk -W posix '/^(((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))\.){3}((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))$/'
$ echo 192.168.2.43 | gawk -W posix '/^(((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))\.){3}((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))$/'
192.168.2.43
Falou!!!