
Ich habe eine Frage. Ich möchte ein Skript ausführen, das mein Netzwerk scannt und mir zeigt, welche Geräte in meinem Netzwerk aktiv sind. Ich möchte auch einige Argumente in das Skript einfügen.
Wenn ich das Skript ausführe:
./ping.sh --xx-YY 20 50
Ausgabe:
192.168.0.20 is down
192.168.0.21 is up
..................................
192.168.0.50 is up
the argument -t , counts 200 by the last digit for ex. ./ping.sh -t 20 output: 192.168.0.220 is up
Aber mein Problem ist das Argument --up en -mac, das ich haben möchte, wenn ich das Skript ./ping.sh --up ausführe. Es zeigt nur die Computer an, die aktiv sind. Und das Argument -mac ist auch ein Problem, wenn ich das Skript ausführe. Ich möchte die IP-Adressen und die Mac-Adresse anzeigen, nachdem die Computer gepingt haben.**
Kann mir jemand bei diesen beiden Argumenten helfen?
Dies ist mein Skript.
#!/bin/bash
while [[ -n "$@" ]]
do
case "$1" in
-h|--help)
Extension=1
shift
;;
-XX-YY)
Extension=2
shift
min=$1
shift
max=$1
shift
;;
--up)
Extension=3
shift
end=$1
shift
;;
-t)
Extension=4
shift
count=$(($1+200))
shift
;;
esac
done
if [ "$Extension" -eq 1 ] ; then
echo "dit is de help"
fi
if [ "$Extension" -eq 2 ] ; then
for ((n=$min ; n<=$max ; n+=1))
do
ip=192.168.0.$n
if ping -c 1 -w 1 ${ip} > /dev/null 2> /dev/null >> logping.txt; then
echo "${ip} is up"
else
echo "${ip} is down"
fi
done
fi
if [ "$Extension" -eq 3 ] ; then
ip=192.168.0.$end
if ping -c 1 -w 1 ${ip} > /dev/null 2> /dev/null >> /logping.txt; then
echo "${ip} is up"
fi
fi
if [ "$Extension" -eq 4 ] ; then
ip=192.168.0.$count
if ping -c 1 -t 1 ${ip} > /dev/null 2> /dev/null >> logping.txt; then
echo "${ip} is up"
else
echo "${ip} is down"
fi
fi
Antwort1
Lasst uns etwas Ordnung schaffen.
Fall Nr. 5: -mac
oder besser,--ip
Es gibt keine Probleme in den "Case Statement"-Zeilen Ihres Falls Nr. 5.
Trotzdem empfehle ich Ihnen dringend, den Namen der Option von-mac
Zu--ip
. „Mac-Adresse“ und „IP-Adresse“ sind unterschiedliche Konzepte, und ich denke, in diesem Fall ip
ist es das passende.
Stilfrage: Auch wenn es keine strenge Regel ist, ist es üblich, ein einzelnes Zeichen zu verwenden, -
wenn die folgende Option nur aus einem Buchstaben besteht, und ein doppeltes, --
wenn sie aus mehr als einem Buchstaben besteht. In Ihrem Beispiel haben Sie beispielsweise -h
und --help
. (Korrigieren Sie auch das --xx-YY
). Skripte neigen dazu, eine gewisse Zeit zu überdauern, und es wird später seltsam sein, sie mit nur einem zu sehen -
.
Zurück zum Code von Nr. 5. Sie können etwas Ähnliches verwenden wie:
if [ "$Extension" -eq 5 ] ; then
ip=192.168.1.$mac
if nmap -sP -n -r $ip | grep "is up" >/dev/null ; then
echo "${ip} is up"
fi
fi
Fehler bei diesem Versuch:
ip=192.168.0.$mac
ist definiert auf192.168.
0
.xxx
und in der folgenden Zeile wird nicht die Variable verwendet $ip
, sondern das Subnetz192.168.
1
.0/24
Der verschachtelte if... then fi
Block wird nicht durch einen abgeschlossen fi
.
**Fall #3: --up
**
Wenn ich richtig verstehe, was Sie meinen, möchten Sie irgendwie die Liste allerhochHost in diesem Subnetz. Sie müssen also nicht angeben,EndeVariable für dieIP, aber Sie sollten das gesamte Subnetz scannen 192.168.1.xxx
.
Sie können etwa die folgenden Befehle verwenden
if [ "$Extension" -eq 3 ] ; then
sudo nmap -sP -n -r 192.168.1.0/24 | grep -E "Nmap scan|MAC Address:"
fi
Update: Hinweise zur MAC-Adresse