hi,
ein syntax problem ist gerade dabei, mir den letzten nerv zu rauben.
ich will eine reihe IPs (die stehen in der datei ips.allow) anpingen und den jeweiligen exit-status in variablen namens "exit{zugehörige IP}" speichern.
hier mal der code, wie ich es realisiert hätte:
for IP in `cat ips.allow | grep 192.168.10`
do
ping -c2 $IP
exit{$ip}=`echo $?`
#testhalber nur ein echo
echo $exit{$ip}
done
leider funktioniert das ganze so nicht (ich habe noch zig schreibweisen probiert, bin leider nicht auf keinen grünen ast gekommen).
normal dürfte das ganze nur ein syntax problem sein.
weiß wer, wie ich es ausdrücken muss?
vielen dank schon im vorraus
Linux 15.036 Themen, 107.107 Beiträge
for IP in $(cat ips.allow |grep 192.168.10)
do
ping -c2 $IP 1>/dev/null 2>&1 # pingen, ausgabe wegwerfen
echo $? # gibt rückgabewert aus
done
hi asd,
danke schon mal für die antwort.
mir geht es aber besonders darum, den exit-status in variablen zu speichern, weil ich ihn später noch brauche.
nach dem script sollte eine reihe variablen (genau so viele, wie ips in der ips.allow stehen) existieren, die den jeweiligen exit-status gespeichert haben.
sprich als beispiel:
#echo exit192.168.10.1
#1
#echo exit192.168.10.2
#0
.
.
.
das würde ja theoretisch gehen, so wie ich es gemacht habe
exit$ip=`echo $?`
leider stimmt die schreibweise nicht. also ich will eine variable in einem variablennamen verwenden...
Variablen müssen immer erst deklariert und definiert werden, bevor sie verwendet werden können. Da du nicht genau weiß, wie viele Adressen du anpingen willst kannst du auch nicht die richtige Anzahl Variablen in deinem Script deklarieren.
Du kannst das Ergebnis aber in eine Datei mit dem Operator > umleiten !
Wenn du dann in einem anderen Script die Daten wieder einlesen willst, mußt du einen neuen Datenstrom (stdin, stdout und stderr werden immer automatisch geöffnet)öffnen:
Kanalnummer
Kanalnummer muß größer als 2 sein.
Du kannst dann eine zeile nach der anderen aus der datei auslesen.
Am Ende muß der neue Kanal wieder geschlossen werden:
Kanalnummer
In ander
Die Syntax ist falsch. Das Öffnene eines neune Kanals lautet:
Kanalnummer
Dein Problem hatte ich auch mal, ich habs gelöst und auf meinem Rechner zuhause. Hier habe ich kein Beispiel mehr und weiss nurnoch, das es mit "eval" zu bewerkstelligen war. Du musst quasi dem Script erst sagen das es den Variablennamen $IP in den dahinterstehenden Wert ändern soll und danach erst den Rest der anweisung ausführt... ich spätestens wenn ich wieder zuhause bin, kann ich dir die Lösung sagen.
KarstenW
Das mit den Variablen declarieren / initiieren / definieren ist in der Shell nicht so streng wie z.B. unter C oder Java. Der Ansatz von higgl ist "variablentechnisch" schon ok. :-)
Ich hab mal etwas im Gedächtnis und dem editor gekramt...
#! /bin/sh
for IP in `seq 1 5` #zum Testen irgend eine Reihe
do
ping -c2 10.98.53.${IP} #pingen der IP
eval ex_code$IP=$(echo $?) #schreiben der ex_code1 ex_code2 ex_code3...
echo ex_code${IP} $((ex_code$IP)) #Ausgabe des Variablennamens und des Wertes
done
Ich hoffe das du soetwas ähnliches wolltest.
genau das wollte ich!
vielen herzlichen dank!