![](https://seccdn.libravatar.org/avatar/72e21492564e707d277539694c80a1a1.jpg?s=120&d=mm&r=g)
Hallo Leute, ich hab leider ein kleines Problem mit der Abfrage von Wahrheitswerten in der Shell-Programmierung. Ich moechte ein Shellscript schreiben, was unterschiedlich auf die Antwort von Ping reagiert .. Ungefaehr so: #!/bin/bash # if [ping blah (true)]; then (blockanweisung); else (blockanweisung); fi exit 0 Knackpunkt ist die Auswertung der Ping-Antwort. Koennte mir dabei jemand unter die Arme greifen?? Waere nicht schlecht .. Ich danke Euch schon mal im Vorraus fuer Eure Hilfe. Gruesse, Jan -- ___powrd_by_____ ___ ___ __ __ | #124386 | 2.0.38s & 2.2.13 | | (_) | __ \ | | | | \ \/ / | http://141.30.230.212 | |__ | | | | | | | |_| | | | | talk waja@141.30.230.212 |____| |_| |_| |_| \____| /_/\_\ | waja@gmx.de | phone: +491726611338 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
![](https://seccdn.libravatar.org/avatar/4152e642369c2c4ca0f6445c1e392dd3.jpg?s=120&d=mm&r=g)
Hi Jan, "Wagner, Jan" wrote:
ich hab leider ein kleines Problem mit der Abfrage von Wahrheitswerten in der Shell-Programmierung. Ich moechte ein Shellscript schreiben, was unterschiedlich auf die Antwort von Ping reagiert .. Ungefaehr so:
#!/bin/bash #
if [ping blah (true)]; then (blockanweisung); else (blockanweisung); fi exit 0
Knackpunkt ist die Auswertung der Ping-Antwort. Koennte mir dabei jemand unter die Arme greifen?? Waere nicht schlecht ..
Ich denke das geht so (allerdings kenne ich's nur bei der ksh): #!/bin/ksh if test <Kommando mit allen optionen> ; then echo "Kommando war erfolgreich" else echo "Kommando war NICHT erfolgreich" fi Das test wertet einfach den Return-Code des Kommandos aus und ver- zweigt dann in die jeweilige if-Schleife. Den Return-Code des Kommandos kann DIREKT nachdem das Kommando gelaufen ist mit echo $? ermittelt werden. 0 = normalerweise OK, sonst nicht OK Hoffe das wars. Viel Spass Werner --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
![](https://seccdn.libravatar.org/avatar/b6f762bce93171cac3931006c815dc4d.jpg?s=120&d=mm&r=g)
Wagner, Jan wrote:
ich hab leider ein kleines Problem mit der Abfrage von Wahrheitswerten in der Shell-Programmierung.
Ich moechte ein Shellscript schreiben, was unterschiedlich auf die Antwort von Ping reagiert .. [Script-Fragment]
Knackpunkt ist die Auswertung der Ping-Antwort. Koennte mir dabei jemand unter die Arme greifen?? Waere nicht schlecht ..
Es gibt hier mehrere Knackpunkte: 1. Der ping kommt nicht zurück, wenn er erfolgreich ist. Also: ping -c 3 oder so, damit max. 3 Pakete gesendet werden. 2. Die Return-Codes von ping: Mit man ping erhält man: If ping does not receive any reply packets at all it will exit with code 1. On error it exits with code 2. Otherwise it exits with code 0. This makes it possible to use the exit code to see if a host is alive or not. In Deinem Beispiel willst Du ja diesen Returncode auswerten. Ich würde das aber besser folgendermaßen machen: <ungetestet> #! /bin/bash # ping absetzen, Ausgabe ist unwichtig ping -q -c 3 host >/dev/null 2>&1 # Return-code abholen rc=$? # rc auswerten case $rc in 0) alles_ok_bearbeiten;; 1) host_antwortet_nicht_bearbeiten;; 2) ping_fehler_bearbeiten;; esac exit $rc </ungetestet> Trotzdem dauert es im Fall eines nicht erreichbaren Hosts natürlich ein Weilchen, bis ping zurück ist. Jan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
![](https://seccdn.libravatar.org/avatar/3112b6c2aa2dc7030cc94b8d1f7938a0.jpg?s=120&d=mm&r=g)
Wagner, Jan wrote:
ich hab leider ein kleines Problem mit der Abfrage von Wahrheitswerten in der Shell-Programmierung.
Ich moechte ein Shellscript schreiben, was unterschiedlich auf die Antwort von Ping reagiert ..
Ungefaehr so:
#!/bin/bash #
if [ping blah (true)]; then (blockanweisung); else (blockanweisung); fi exit 0
Knackpunkt ist die Auswertung der Ping-Antwort. Koennte mir dabei jemand unter die Arme greifen?? Waere nicht schlecht ..
ping -c 3 127.0.0.1 ; # 3 pings auf's lo-Interface if [ $? -eq 0 ] ; then echo "suupie" ; else echo "verflxwtwlt@!!!" ; fi Ping liefert nach Beendigung einen Rückgabewert, der in der Variablen $? zu finden ist. In der Testbedingung [ ] wird geprüft, ob der Wert von $? 0 (Null) entspricht oder nicht (achte auf die Leerzeichen nach "[" und vor "]". Ich weiß aber nicht, was ping zurückgibt, wenn nicht alle Pakete beantwortet wurden. christian -- Bitte kein CC: bei Antwort an Mailingliste Mail-Etikette: To: cschult@gmx.de, Subject: send etikette Mail-Etikette: http://www.ndh.net/home/schult/ --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
![](https://seccdn.libravatar.org/avatar/72e21492564e707d277539694c80a1a1.jpg?s=120&d=mm&r=g)
Hallo Liste, erstmal danke, fuer Eure schnellen und hilfreichen Antworten. Waren richtig Klasse ...
ping -c 3 127.0.0.1 ; # 3 pings auf's lo-Interface if [ $? -eq 0 ] ; then echo "suupie" ; else echo "verflxwtwlt@!!!" ; fi
So ungefaehr hatte ich es schon fast geschafft .. nur dass mir hier ein Semikolon und da ein Gaensefuesschen gefehlt hat .. sprich der Syntax ;o) Ich habe jetzt folgendes gemacht und es funktioniert einwandfrei: #!/bin/bash # ping -q -c 3 192.168.1.2 >> /dev/null; if [ $? -eq 0 ] ; then echo "mithrandir online" ; else echo "mithrandir offline" ; fi exit 0 Danke nochmal allen, die so schnell geantwortet haben. Bye, Jan P.S. Wen es interessiert, ich habe auf http://141.30.230.212 einen kleinen Adventskalender gebastelt, ab morgen sollte er dann auch funktionieren. -- ___powrd_by_____ ___ ___ __ __ | #124386 | 2.0.38s & 2.2.13 | | (_) | __ \ | | | | \ \/ / | http://141.30.230.212 | |__ | | | | | | | |_| | | | | talk waja@141.30.230.212 |____| |_| |_| |_| \____| /_/\_\ | waja@gmx.de | phone: +491726611338 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
![](https://seccdn.libravatar.org/avatar/b6f762bce93171cac3931006c815dc4d.jpg?s=120&d=mm&r=g)
Wagner, Jan wrote: [...]
Ich habe jetzt folgendes gemacht und es funktioniert einwandfrei:
#!/bin/bash # ping -q -c 3 192.168.1.2 >> /dev/null; if [ $? -eq 0 ] ; then echo "mithrandir online" ; else echo "mithrandir offline" ; fi exit 0
Beachte aber bitte, dass nur rc = 1 die Bedeutung *host ist offline* hat. rc = 2 heisst *fehler bei ping* und kommt bei mir z. B. wenn ich einen Host mit Namen anspreche, der in der /etc/hosts nicht existiert. Jan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
![](https://seccdn.libravatar.org/avatar/72e21492564e707d277539694c80a1a1.jpg?s=120&d=mm&r=g)
Hallo Liste!!
ping -q -c 3 192.168.1.2 >> /dev/null; if [ $? -eq 0 ] ; then echo "mithrandir online" ; else echo "mithrandir offline" ; fi exit 0
Jetzt habe ich folgendes Problem. Ich mache das jetzt fuer mehrere Rechner. Wenn die alle nicht online sind, dauert das ewig, weil der Timeout standardmaessig auf 10 sec. steht. Normalerweise kann man das mit der Option -w einstellen. Aber ich hab hier SuSE 5.3 am Laufen und da gibt es diese Option anscheinend nicht. Bekomme ich dafuer irgendwo die Source her und kann das dann durch selbstkompilieren beheben oder muss ich jetzt mit dem 10 sec. Timeout leben? Ich habe an dem Problem jetzt ueber 2 Stunden gesessen und auch schon versucht, das anders zu loesen, ohne Erfolg. Ich bin langsam am Verzweifeln. Bin ich wirklich so bloed?? Danke schon mal fuer Eure hoffentlich kommenden Lichtblicke. Bye, Jan -- ___powrd_by_____ ___ ___ __ __ | #124386 | 2.0.38s & 2.2.13 | | (_) | __ \ | | | | \ \/ / | http://141.30.230.212 | |__ | | | | | | | |_| | | | | talk waja@141.30.230.212 |____| |_| |_| |_| \____| /_/\_\ | waja@gmx.de | phone: +491726611338 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
![](https://seccdn.libravatar.org/avatar/35af32194867ff8324febecf126ccf20.jpg?s=120&d=mm&r=g)
Hi, Wagner,! Trying to kill the keyboard, Wagner, Jan (waja@gmx.de) produced 1,3K in 39 lines: [Ping]
Jetzt habe ich folgendes Problem. Ich mache das jetzt fuer mehrere Rechner. Wenn die alle nicht online sind, dauert das ewig, weil der Timeout standardmaessig auf 10 sec. steht. [aber hier ist die Option nicht vorhanden.]
Willst du vielleicht fping? -Wolfgang --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
![](https://seccdn.libravatar.org/avatar/f69149ad47a1861ed2b7d6f5ecee6d16.jpg?s=120&d=mm&r=g)
* Christian Schult schrieb am 30.Nov.1999:
ping -c 3 127.0.0.1 ; # 3 pings auf's lo-Interface if [ $? -eq 0 ] ; then echo "suupie" ; else echo "verflxwtwlt@!!!" ; fi
Warum so kompliziert? if ping -c 3 127.0.0.1 then echo "suupie" else echo "verflxwtwlt@!!!" fi macht das gleiche. if fragt nach dem exitstatus des nachfolgenden Kommando. test oder [...] was das gleiche ist, gibt einen exitcode aus. Aber man kann den exitcode doch direkt nehmen. ; am Ende einer Zeile sind überflüssig. ;; ist etwas anders und gibt es nur bei case. Die Bedenken von Jan sind hier unberührt. Da kann ich nichts zu sagen, da ich mich mit ping nicht auskenne. Ich behaupte nur, das mein Skript das Gleiche tut wie Christians. Bernd -- Alle meine Signaturen sind rein zufällig und haben nichts mit dem Text oder dem Schreiber zu tun, dem ich antworte. Falls irgendwelche Unrichtigkeiten dabei sein sollten, so bedauere ich das. Es wäre nett, wenn Du mich benachrichtigen würdest. |Zufallssignatur 0 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
![](https://seccdn.libravatar.org/avatar/5257c9eea5057b6e5558c47ea690d569.jpg?s=120&d=mm&r=g)
On Tue, 30 Nov 1999, Wagner, Jan wrote:
ich hab leider ein kleines Problem mit der Abfrage von Wahrheitswerten in der Shell-Programmierung.
Och, das ist einfach. Versuch das aber mal beim Menschen ...
Ich moechte ein Shellscript schreiben, was unterschiedlich auf die Antwort von Ping reagiert ..
if ping -qc 1 192.168.$x.$y then finger @192.168.$x.$y >> finger.txt fi Carsten --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
![](https://seccdn.libravatar.org/avatar/67a509132720e4ac7cfecfa51bae2fd4.jpg?s=120&d=mm&r=g)
On Tue, 30 Nov 1999, Wagner, Jan wrote:
Ich moechte ein Shellscript schreiben, was unterschiedlich auf die Antwort von Ping reagiert ..
Ungefaehr so:
#!/bin/bash #
if [ping blah (true)]; then (blockanweisung); else (blockanweisung); fi exit 0
Knackpunkt ist die Auswertung der Ping-Antwort. Koennte mir dabei jemand unter die Arme greifen?? Waere nicht schlecht .. Gruesse, Jan ich mach das so in einem script (bash):
case `ping -qnc5 ns.domain.irgendwo` in *`100% packet loss`*) echo "The server is down" exit 0 ;; esac hope this helps --- Michael Karges, mika@ins.at, kar@space.at Powered by Linux! Bye Billy boy! --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (8)
-
B.Brodesser@online-club.de
-
cmeyer@mail.com
-
cschult@gmx.de
-
Jan@lot-germany.com
-
mika@ins.at
-
waja@gmx.de
-
weissel@ph-cip.uni-koeln.de
-
wfranke@slds1.de.lucent.com