Has solicitado que Bash:
INET_NTOA() {
local IFS=. num quad ip e
num=$1
for e in 3 2 1
do
((quad = 256 ** e))
((ip[3-e] = num/quad))
((num = num % quad))
done
ip[3]=$num
echo "${ip[*]}"
}
INET_ATON()
{
local IFS=. ip num e
ip=($1)
for e in 3 2 1
do
((num += ip[3-e] * 256 ** e))
done
((num += ip[3]))
echo "$num"
}
Ejemplos:
$ INET_ATON 10.2.1.255
167903743
$ INET_NTOA 167903743
10.2.1.255
que aquí hay una versión que funcione en cualquiera de las conchas derivados de Bourne He intentado incluyendo guión, ksh, varias versiones de Bash, BusyBox ash, zsh (con -y
) e incluso el Heirloom Bourne Shell.
INET_NTOA() {
num=$1
ip=
for e in 3 2 1
do
quad=`echo "256^$e" | bc`
if [ -n "$ip" ]
then
ip=$ip.
fi
ip=$ip`echo "$num/$quad" | bc`
num=`echo "$num % $quad" | bc`
done
ip=$ip.$num
echo "$ip"
}
INET_ATON()
{
num=0
e=3
saveIFS=$IFS
IFS=.
set -- $1
IFS=$saveIFS
for ip in "[email protected]"
do
num=`echo "$num + $ip * 256^$e" | bc`
e=`echo "$e - 1" | bc`
done
echo "$num"
}
Gracias! No me di cuenta de que puedes pasar el campo mysql a INET_NTOA. – Mark