Linux 15.036 Themen, 107.107 Beiträge

shell script - syntax problem

higgl / 7 Antworten / Baumansicht Nickles

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

Never argue with an idiot. They drag you down to their level and then beat you with experience.
bei Antwort benachrichtigen
asd higgl „shell script - syntax problem“
Optionen

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

bei Antwort benachrichtigen
higgl asd „for IP in cat ips.allow grep 192.168.10 do ping -c2 IP 1 /dev/null 2 1 pingen,...“
Optionen

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...

Never argue with an idiot. They drag you down to their level and then beat you with experience.
bei Antwort benachrichtigen
KarstenW higgl „hi asd, danke schon mal für die antwort. mir geht es aber besonders darum, den...“
Optionen

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

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
KarstenW Nachtrag zu: „Variablen müssen immer erst deklariert und definiert werden, bevor sie...“
Optionen

Die Syntax ist falsch. Das Öffnene eines neune Kanals lautet:
Kanalnummer

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
XPectIT higgl „shell script - syntax problem“
Optionen

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. :-)

bei Antwort benachrichtigen
XPectIT Nachtrag zu: „Dein Problem hatte ich auch mal, ich habs gelöst und auf meinem Rechner...“
Optionen

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.

bei Antwort benachrichtigen
higgl XPectIT „Ich hab mal etwas im Gedächtnis und dem editor gekramt... ! /bin/sh for IP in...“
Optionen

genau das wollte ich!

vielen herzlichen dank!

Never argue with an idiot. They drag you down to their level and then beat you with experience.
bei Antwort benachrichtigen