Ich sollte klarstellen, dass der Code hier für Linux funktioniert (beachten Sie Kommentare und Beiträge zu anderen Unices). OP hat nach einer Linux-Lösung gefragt, aber es wäre gut, die Frage allgemein in "Wie bekomme ich eine Netzmaske" zu ändern, und die Antwort den besten Weg für mehr Unix-Varianten kombinieren zu lassen.
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
./script eth0
Über ifconfig unter Linux
Zusammen mit anderen traditionellen Netzwerkbefehlen wie netstat, arp, rarp und route ist ifconfig Teil der net-tools Paket. Net-Tools wurde seit sehr langer Zeit nicht mehr aktiv entwickelt und es gibt Bemühungen, es zugunsten des neueren iproute2 abzulehnen Paket. Wenn Sie weitere Einzelheiten zu diesem grundlegenden Übergang wünschen, finden Sie hier einige relevante Links:
Fallbeispiel:Debian Linux
Fallbeispiel:Arch Linux
Manpage für net-tools ifconfig (siehe BUGS-Abschnitt)
Analyse und Vergleich der Frameworks aus Nutzersicht
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
?
Ich frage mich, ob Sie wirklich nur die Maske wollen. Vielleicht möchten Sie wirklich das Netzwerk (oder die IP) mit Maske, um es in Konfigurationsdateien zu verwenden, mit nmap
, oder was auch immer.
In diesem Fall können Sie unter Linux auch die Ausgabe von ip ...
parsen Befehl.
So listen Sie alle Schnittstellen mit ihrer Adresse und Maske in CIDR-Notation auf:
ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
Oder um es auf die Standardschnittstelle zu beschränken:
default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
was mir "192.168.1.61/24" auf meinem Rechner gibt.