Como usar o código de retorno do bash em condicional?
Eu tenho um pequeno pedaço de código que verifica a validade do endereço IP:
function valid_ip()
{
local ip=$1
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
if [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
&& ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]; then
stat=1
else
stat=0
fi
fi
return $stat
}
Mas estou tendo problemas com seu uso em condicionais bash. Eu tentei muitas técnicas para testar seu valor de retorno, mas a maioria delas falha em mim.
if [[ !$(valid_ip $IP) ]]; then
if [[ $(valid_ip IP) -eq 1 ]]; then
etc etc. Alguém pode sugerir o que devo fazer aqui?
EDITAR
Seguindo suas sugestões, usei algo como:
if valid_ip "$IP" ; then
... do stuff
else
perr "IP: \"$IP\" is not a valid IP address"
fi
e eu recebo erros como
IP: "10.9.205.228" não é um endereço IP válido