Внутри 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
Ссылки: