Aus CIDR-Schreibweise eine Maske berechnen

Es gibt Python-Scripte dafür und Perl-Bibliotheken auch, aber was, wenn man in Bash eine IPv4-Prefixlänge in eine Maske umrechnen will? Etwa /24 in 255.255.255.0? Das geht so:

#!/bin/bash

function PFLcalc () {
        let NN=32-$1
        PL=$(printf -- '1%.0s' $(seq 1 $1))
        PR=$(printf -- '0%.0s' $(seq 1 $NN))
        PF=$PL$PR
        OCT1=$(echo "ibase=2; ${PF:0:8}" | bc)
        OCT2=$(echo "ibase=2; ${PF:8:8}" | bc)
        OCT3=$(echo "ibase=2; ${PF:16:8}" | bc)
        OCT4=$(echo "ibase=2; ${PF:24:8}" | bc)
        MASK=$OCT1.$OCT2.$OCT3.$OCT4
}
PFLcalc $1 # call script with int le 24
echo "Mask is $MASK"

Ja, bei einer Länge von 0 verrechnet sich das Script. Pech.

Aus CIDR-Schreibweise eine Maske berechnen