Obtener la lista de direcciones entre 10.20.30.40 y 10.20.30.250 no es tan complicado, pero obtener la lista entre la 10.20.30.40 y la 11.25.60.250, se vuelve algo complejo, considerando ambas direcciones IP como variables arbitrarias.
Un método puede ser convertir la IP de bytes (octetos) a decimal puro y recorrer con un «for» los decimales y convertir nuevamente al final.
function ip2dec {
echo $(( $1*256*256*256 + $2*256*256 + $3*256 + $4 ))
}
function dec2ip {
O4=$(( $1 % 256 ))
O3=$(( ($1/256) % 256 ))
O2=$(( ($1/(256*256)) % 256 ))
O1=$(( ($1/(256*256*256)) % 256 ))
echo $O1.$O2.$O3.$O4
}
IP_START=10.20.30.40
IP_END=10.25.60.250
# Separar los octetos en START_OCTET[1..4] y END_OCTET[1..4]
IFS=. read START_OCTET[1] START_OCTET[2] START_OCTET[3] START_OCTET[4] < <( echo "$IP_START" )
IFS=. read END_OCTET[1] END_OCTET[2] END_OCTET[3] END_OCTET[4] < <( echo "$IP_END" )
# Recorrer los decimales, convirtiendo los resultados a IP.
for (( IP = `ip2dec ${START_OCTET[1]} ${START_OCTET[2]} ${START_OCTET[3]} ${START_OCTET[4]}`; \
IP <= `ip2dec ${END_OCTET[1]} ${END_OCTET[2]} ${END_OCTET[3]} ${END_OCTET[4]}`; \
IP++ )); do
echo `dec2ip $IP`
done