У меня есть небольшой фрагмент кода, который проверяет достоверность 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
}
Но у меня возникают проблемы с его использованием в условных выражениях bash. Я пробовал много методов, чтобы проверить его возвращаемое значение, но большинство из них терпят неудачу.
if [[ !$(valid_ip $IP) ]]; then
if [[ $(valid_ip IP) -eq 1 ]]; then
и т.д.. и т.д. Может ли кто-нибудь предложить, что мне здесь делать?
ИЗМЕНИТЬ
Следуя вашим предложениям, я использовал что-то вроде:
if valid_ip "$IP" ; then
... do stuff
else
perr "IP: \"$IP\" is not a valid IP address"
fi
и я получаю ошибки вроде
IP: "10.9.205.228" недействительный IP-адрес