Explication de convertisseur de cidr pour le masque de réseau sous linux shell netmask2cdir et cdir2netmask

J'ai trouvé le shell suivante des fonctions à partir de ce sujet

mask2cdr ()
{
   # Assumes there's no "255." after a non-255 byte in the mask
   local x=${1##*255.}
   set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*}
   x=${1%%$3*}
   echo $(( $2 + (${#x}/4) ))
}


cdr2mask ()
{
   # Number of args to shift, 255..255, first non-255 byte, zeroes
   set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
   [ $1 -gt 1 ] && shift $1 || shift
   echo ${1-0}.${2-0}.${3-0}.${4-0}
}

Pourriez-vous expliquer en détails comment ces fonctions convertissent cidr pour le masque de réseau et le masque de réseau pour cidr? Plus précisément, les appels à set, le paramètre d'expansion ${#…}, et l'expansion arithmétique $((…)) sont assez écrasante.

De toute partie, ou avez-vous juste de ne pas comprendre une partie de la création de scripts shell?
l'ensemble du code n'est pas clair pour moi
Je ne sais pas pourquoi vous avez fermé à cette question, mais c'est une bonne question et la réponse est wonerful
Je ne sais pas pourquoi vous avez fermé à cette question, mais c'est une bonne question et la réponse est wonerful
ne sais pas pourquoi vous avez fermé à cette question, mais c'est une bonne question et la réponse est wonerful

OriginalL'auteur MOHAMED | 2013-12-24