Windows 2003 Shell Scripting
Shell Scripting im Netzwerk
Netzwerkadresse berechnen
Dieses Script ist aus reiner Faulheit entstanden. In diesem Fall benötigten wir für eine IP-Adresse im Dialogfeld der TCP/IP-Eigenschaften schnell den Netzwerkanteil. Leider finden sich im Dialogfeld nur die IP-Adresse und die Subnet-Maske. Dieses Script nimmt Ihnen in Zukunft die Rechnerei ab und ist gleichzeitig ein gutes Beispiel für den sinnvollen Einsatz von set /a
.
Parameter
-
%1 = IP-Adresse in dezimaler Punktnotation
-
%2 = Subnetzmaske in dezimaler Punktnotation
Code
@echo off
if !%1 == ! goto noparm
if !%2 == ! goto noparm
setlocal
:: das for-Kommando ist eine Zeile!
for /F "delims=. tokens=1,2,3,4" %%f in ("%1") do for /F
"delims=. tokens=1,2,3,4" %%m in ("%2") do call :doByte
%%f %%g %%h %%i %%m %%n %%o %%p
::
goto :eof
:noparm
echo Calculate network address from ip and subnet mask
echo.
echo Usage: %0 [ipaddr] [netmask]
echo.
echo Either [ipaddr] or [netmask] is missing ....
goto :eof
:doByte
set /A byte="%1 & %5"
set net=%byte%
set /A byte="%2 & %6"
set net=%net%.%byte%
set /A byte="%3 & %7"
set net=%net%.%byte%
set /A byte="%4 & %8"
set net=%net%.%byte%
echo Network address = %net%
endlocal
Funktion
Aufruf beispielsweise mit
getnetwork.bat72.31.168.10 255.255.240.0
Die Ausgabe Network address = 172.31.160.0
liefert dann die Netzwerkadresse für eine bestimmte IP anhand der Subnetmaske.
Die Funktion des Scripts selbst ist eigentlich nur eine einzige Demonstration der Nutzung von set
für die Arbeit mit Bitoperatoren. Dazu werden die beiden Parameter anhand des Trennzeichens ".
" mit zwei for
-Schleifen in die einzelnen Bytes aufgeteilt. Diese werden dann ab der Sprungmarke :doByte
logisch UND
-verknüpft, um die Netzwerkadresse zu erhalten.