Внутри shell-скриптов иногда нужно оперировать IP адресами. Например, необходимо вычислить, входит ли адрес 123.4.56.7 в диапазон адресов 123.0.0.1-123.5.255.255. Проще всего это сделать, переведя адрес в целое число и сравнив его с граничными значениями. Для этих целей подойдут две функции в 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"
}
Пример работы функций:
$ INET_ATON 10.2.1.255 167903743 $ INET_NTOA 167903743 10.2.1.255
Ссылки: