June 29th, 2011

nepal

cidr2mask на shell

В интернетах эта функция гуглится, но то, что нагугливается. не работает под dash. Ввиду того, что дебианеры фашисты в Debian шеллом по умолчанию может запросто оказаться dash, а городить зависимость от bash не хочется, я слегка переделал скопипащенную из интернетов функцию, и теперь она работает и под dash тоже.

Покритикуйте, кто в теме.

cidr2mask() {
	local i mask=""
	local full_octets=$(($1/8))
	local partial_octet=$(($1%8))

	for i in 0 1 2 3; do
		if [ $i -lt $full_octets ]; then
			mask="${mask}255"
		elif [ $i -eq $full_octets ]; then
			mask="${mask}$((256 - (1 << (8 - $partial_octet))))"
		else
			mask="${mask}0"
		fi
		test $i -lt 3 && mask="${mask}."
	done

	echo $mask
}