Kể từ khi bạn yêu cầu 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"
}
Ví dụ:
$ INET_ATON 10.2.1.255
167903743
$ INET_NTOA 167903743
10.2.1.255
Đây là một phiên bản đó sẽ làm việc trong bất kỳ vỏ Bourne có nguồn gốc từ Tôi đã cố gắng bao gồm dấu gạch ngang, ksh, một số phiên bản của Bash, BusyBox ash, zsh (với -y
) và thậm chí là 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"
}
Nguồn
2010-07-11 09:24:08
Cảm ơn! Đã không nhận ra bạn thực sự có thể vượt qua trường mysql để INET_NTOA. – Mark