Je dois préciser que le code ici fonctionne pour Linux (notez les commentaires et postez sur d'autres Unix). OP a demandé une solution Linux, mais il serait bon de changer la question en "comment obtenir un masque de réseau" en général, et que la réponse combine la meilleure façon pour plus de saveurs Unix.
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
./script eth0
À propos d'ifconfig sous Linux
Avec d'autres commandes réseau traditionnelles comme netstat, arp, rarp et route, ifconfig fait partie des net-tools forfait. Net-tools n'a pas été activement développé depuis très longtemps et il y a des efforts pour le déprécier en faveur du plus récent iproute2 forfait. Par souci de concision, si vous souhaitez plus de détails sur cette transition fondamentale, voici quelques liens pertinents :
Exemple de cas :Debian Linux
Exemple de cas :Arch Linux
Page de manuel pour net-tools ifconfig (voir la section BOGUES)
Analyse et comparaison des frameworks du point de vue des utilisateurs
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
?
Je me demande si vous ne voulez vraiment que le masque. Peut-être que vous voulez vraiment le réseau (ou IP) avec masque, à utiliser dans les fichiers de configuration, avec nmap
, ou quoi que ce soit.
Dans ce cas, sous Linux, vous pouvez également analyser la sortie du ip ...
commande.
Pour lister toutes les interfaces avec leur adresse et leur masque en notation CIDR :
ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
Ou pour le restreindre à l'interface par défaut :
default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
ce qui me donne "192.168.1.61/24" sur ma machine.