Ho un piccolo pezzo di codice che verifica la validità indirizzo IP:Come utilizzare il codice di ritorno di bash in condizionale?
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
}
Ma io sto avendo problemi con il suo utilizzo in condizionali bash. Ho provato molte tecniche per testare il suo valore di ritorno ma la maggior parte di esse non ha successo su di me.
if [[ !$(valid_ip $IP) ]]; then
if [[ $(valid_ip IP) -eq 1 ]]; then
ecc. Ecc. Qualcuno può suggerire cosa devo fare qui?
EDIT
Seguendo i suggerimenti che ho usato qualcosa come:
if valid_ip "$IP" ; then
... do stuff
else
perr "IP: \"$IP\" is not a valid IP address"
fi
e ottengo errori come
IP: "10.9.205.228" non è un IP valido indirizzo
Si prega di dare un'occhiata alla mia modifica. – Patryk
La shell interpreta 0 come esito positivo e diverso da zero come errore, opposto alla consueta interpretazione booleana.'valid_IP' dovrebbe restituire 0 se l'indirizzo IP è valido, e 1 altrimenti. – chepner
solo il problema è che questo non funzionerà con 'set -e' –