mehrere Hosts anpingen

M

MCP99999

Grünschnabel
Erstmal ein freundliches HALLO an Alle hier!

Ich habe ein kleines Problem mit einem "Ping-Script"

mein script sieht folgend aus

Code:
#!/bin/bash
ping bild.de -c1 $1 &> /dev/null
if [ "$?" -gt 0 ]; then
echo Alle Hosts sind nicht erreichbar!
else
echo Mindestens ein Host ist erreichbar!
fi
exit 0

Nur möchte ich gerne ca. 5 hosts zum pingen angeben und es soll mir wenn ALLE hosts NICHT erreichbar sind, es ausgeben. Falls ein host erreichbar ist soll es "Mindestens ein Host ist erreichbar!" ausgeben.

Wie währe dies möglich?

PS: ich habe die Suchfunktion benutzt vorher und den thread gesehen http://www.unixboard.de/vb3/showthread.php?t=23348 aber wollte nicht "dazwischenfragen"
 
Hallo

Verstehe ich richtig, du willst 5 IPs aus dem www pingen?
Wenn du eine erreichst, die anderen doch dann auch oder?

versuche es mal mit dem hier:
Code:
#!/bin/bash

	while [ ${k:=1} -le 5 ] ; do
 	ping -c1 192.168.154.$k;
 	k=`expr $k + 1`;
	done;
So kannst du dein Netzwerk auf vorhandene Systeme "pingen"
Das ist zwar IMHO eine langsame Methode, sie funktioniert aber ;)

Gruß Lumpi
 
Evtl. hilft dir das weiter
Code:
1 #1/bin/bash
2 while [ "$#" -gt "0" ]; do
3   echo $1
4   shift;
5 done

In der Console schaut es dann so aus
Code:
grey@mod-001:~$ bash-test 1 2 3
1
2
3
grey@mod-001:~$
 
Und warum benutzt du nicht der Einfachheit halber fping? Damit kannst du auch problemlos mehrere Hosts anpingen.
fping is a like program which uses the Internet Control Message Protocol (ICMP) echo request to determine if a target host is responding. fping differs from ping in that you can specify any number of targets on the command line, or specify a file containing the lists of targets to ping. Instead of sending to one target until it times out or replies, fping will send out a ping packet and move on to the next target in a round-robin fashion.
 
Hallo

Nur mal so als Bemerkung:
Wenn ganze IP-Range gepingt werden sollen, braucht man kein expr (was ohnehin langsamer als ((k++)) ist!
Es gibt Variablenexpansion was auch ksh versteht!
Vorschlag mit entsprechendem echo:
Code:
for i in 192.168.1.{1..5};do ping -c1 -q $i>/dev/null&&echo $i up||echo $i down; done
Tut genau das Gleiche ohne zu zählen. ;)
Zu dem Konstrukt k= `expr $k + 1`

Das ist ein externer Prozess, und wenn vermeidbar sollte man Buildin der Shell verwenden. Die sind enorm schneller!
Beispiel um den Unterschied zu zeigen:
$ k=0;time for i in $(seq 1 1000); do k=`expr $k + 1`; done&& echo $k

real 0m3.700s
user 0m0.956s
sys 0m2.739s

1000
wolle@Nietzsche:~/temp
$ k=0;time for i in $(seq 1 1000); do ((k++)); done&& echo $k

real 0m0.033s
user 0m0.027s
sys 0m0.004s

1000

Und da geht es nur bis 1000.
Also wenn man zählen will ist ((var++)) enorm schneller als expr.
Das gilt für andere Rechenoperationen in der Shell genauso.

Gruß Wolfgang
 

Ähnliche Themen

script sshpass

Verschlüsseltes Backup-Script mit rsync

Shellscript unerwartetes Dateiende

Timeout für Long Time Querys

Queue für copy Script

Zurück
Oben