Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash script um domains zu checken
Dieses Script soll Domains checken und bad or nice ausgeben
#!/bin/bash
for name in $(cat ./domains); do
ping -c 1 $name | grep "packets transmitted" | cut -d " " -f 4 ;
if [ $? -eq 0 ];
then
echo "bad"
else
echo "nice"
fi
done
leider gibt es aber das hier aus
0
bad
1
bad
könnte mir vielleicht jemmand helfen danke im vorraus
Ersetze das
ping -c 1 $name | grep "packets transmitted" | cut -d " " -f 4 ;
durch das
ping -c 1 $name >/dev/null 2>&1
Die Variable $? wird von ping zurueckgegeben
jetz habe ich aber gar keinen Wert den ich auswerten kann in der Schleife
weil ping alle aus gabe nach /dev/null leitet
$? ist ja keine Ausgabe sondern der Rueckgabewert von ping der nicht ausgegeben sondern nur gesetzt wird.
hier kommt entweder eine 1 oder eine 0
ping -c 1 $name | grep "packets transmitted" | cut -d " " -f 4
so bei 0 ist BAD und bei 1 ist nice wie kann ich das sonst lösen
ping -c 1 $name >/dev/null 2>&1
if [ $? -eq 0 ];
then
echo "nice"
else
echo "bad"
fi
oder noch kuerzer:
if ping -c 1 $name >/dev/null 2>&1
then
echo "nice"
else
echo "bad"
fi
das geht so nicht wenn ich alles was ping ausgibt nach /dev/null schicke habe ich ja nichts was ich mit cut und grep bearbeiten kann
falls ich hier in einer Sackgasse bin nehme ich auch jeden anderen
vorschlag dankend an wie ich domain checken kann
es eght eigentlich nurdarum nach änderungen am Nameserver deren erreichbarkeit zu prüfen
peschmae
25-04-2004, 08:07
Der Code von Fork
if ping -c 1 $name >/dev/null 2>&1
then
echo "nice"
else
echo "bad"
fi
tut doch genau das was du willst, oder?
Ping gibt 0 zurück wenns den Rechner erreicht, sonstwas wenn nicht. Der Rückgabewert wird dann ausgewertet. Probiers doch mal aus.
MfG Peschmä
alternativ geht natürlich auch das hier :
if ping -q -c 1 meinedomain.de 2>&1 | grep -q ', 0% packet loss'; then
# juhuu ping war erfolgreich
else
# ping war nicht erfolgreich
fi
aber die oben genannte lösung ist irgendwie sinnvoller ;)
Das Problem wenn man auf genaue Ausgabetexte untersucht ist das sich diese natürlich auch mal etwas ändern können(z. B. auch andersprachige Ausgabe). Der exitcode ist deswegen auch robuster.
peschmae
25-04-2004, 18:41
ausserdem ist der Exitcode ja genau für das da :)
MfG Peschmä
P.S. und du kriegst auch true, wenn mal ein Paket verloren ging. Macht hier aber keinen Unterschied weils nur eines ist ;)
ich habe die lösung von amiga verwendet es geht jetzt ohne problem
danke für eure hilfe
ThorstenS
26-04-2004, 20:08
Wobei eine whois Abfrage natürlich sinnvoller ist, denn gewisse Domains sind auch manchmal nicht zu erreichen ;)
Sogar google hatte heute bei mir eine downtime von < 1Minute
(von mehreren $Hosts aus angepingt - keine Antwort)
Um zu Testen ob mein Router wirklich online ist und nicht wieder die Leute von Teledumm die Leitung nur unidirektional betreiben verwende ich dieses Skript, das minütlich über Crontab aufgerufen wird:
#!/bin/sh
# checkdsl.sh: restart ... if 100% ping loss.
# For use with crontab (like cron.hourly). (nobodyo<nospam>@</nospam>web.de)
# Ping to the access point and DNS servers.
for HOST in 212.114.214.1 212.114.152.1 194.25.2.129 62.96.128.66 195.3.96.67 193.193.144.12 145.253.2.75 195.202.33.68 193.189.224.2 193.189.244.197 194.25.2.130 194.162.162.194 194.183.128.36 62.26.26.62 212.44.160.8 193.141.40.42 134.60.1.111; do
{ ping -Q 0x02 -q -w 3 -c 1 -s 56 $HOST &> /dev/null ; }&& exit
done
# cinternet --verbose --hangup
cinternet --verbose --stop
killall -15 pppd &>/dev/null &
# nohup /bin/terminate smpppd &>/dev/null &
if [ -z "`ps ax | awk '{print $5}' | egrep "(^|/)smpppd"`" ];
then
/usr/sbin/smpppd
sleep 3
# /usr/sbin/rcsmpppd restart
fi
cinternet --verbose --start
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.