ubuntuusers.de

mit "test && " mehrere Befehle ausführen

Status: Ungelöst | Ubuntu-Version: Ubuntu 11.04 (Natty Narwhal)
Antworten |

uid

Anmeldungsdatum:
31. Mai 2010

Beiträge: 15

Hallo,

ist es möglich, mit test && ... mehrere Anweisungen auszuführen?

zB.:
test any_func || echo "nicht erfolgreich" + exit


folgendes führte nicht zum Erfolg:

test any_func || echo "bla" && exit

test any_func || (echo "bla";exit)


Vielen Dank für eure Hilfe.

fbartels

Anmeldungsdatum:
30. Oktober 2007

Beiträge: 314

Wohnort: Hannover

Ja, grundsätzlich ist es möglich mit && Befehle zu verknüpfen.

http://tldp.org/LDP/abs/html/ops.html#ANDOR

Der zweite Befehl wird aber nur ausgeführt wenn der erste Befehl "true" zurück liefert.

riffraff

Avatar von riffraff

Anmeldungsdatum:
1. Oktober 2006

Beiträge: 486

Wohnort: Im kühlen Norden

Was bedeutet denn "führte nicht zum Erfolg"? Fehlermeldung? Anderes Ergebnis als erwartet?

1
2
3
4
5
6
riffraff@compi:~> test 3 -gt 4 || echo "noe" && echo "hurra"
noe
hurra
riffraff@compi:~> test 5 -gt 4 || echo "noe" && echo "hurra"
hurra
riffraff@compi:~> 

Du siehst, dass Du Dir das "&& exit" auch sparen kannst - das wird eh immer ausgeführt.

Was willst Du denn erreichen?

uid

(Themenstarter)

Anmeldungsdatum:
31. Mai 2010

Beiträge: 15

Hallo riffraff, dErFeLe

So wie von riffraff beschrieben funktioniert es noch:
> test 3 -gt 4 || echo "noe" && echo "hurra"

Verbunden mit einem exit

> test 3 -gt 4 || echo "Fehler" && exit

wird der exit aber immer ausgeführt. Was natürlich nur im Fehlerfall passieren soll.
Wo ist hier der Denkfehler? Warum funktioniert es im exitfall nicht ...

riffraff

Avatar von riffraff

Anmeldungsdatum:
1. Oktober 2006

Beiträge: 486

Wohnort: Im kühlen Norden

1
2
3
4
5
6

riffraff@compi:~> test 3 -gt 4 || ( echo "noe" && echo "exit")
noe
exit
riffraff@compi:~> test 5 -gt 4 || ( echo "noe" && echo "exit")
riffraff@compi:~> 

So?

domachine

Anmeldungsdatum:
16. Mai 2007

Beiträge: 562

riffraff schrieb:

1
2
3
4
5
6

riffraff@compi:~> test 3 -gt 4 || ( echo "noe" && echo "exit")
noe
exit
riffraff@compi:~> test 5 -gt 4 || ( echo "noe" && echo "exit")
riffraff@compi:~> 

So oder um die Befehle in der gleichen Shell auszufuehren:

1
test 3 -gt 4 || { echo "noe" && echo "exit"; }

Das gleiche funktioniert natuerlich auch mit &&.

uid

(Themenstarter)

Anmeldungsdatum:
31. Mai 2010

Beiträge: 15

Hallo,

sorry für späte Antwort .. es gibt noch ein Leben außerhalb des Rechners 😉


Um mal an einer praktischen Anwendung zu demonstrieren, was ich meine:
Das hier:

 test ! -f $log || (echo -e "Cron - $server \n\n  Download - Logfile ($log) nicht vorhanden" &2>/dev/null |mail -s "Cron Download - Logfile Fehler - $server" $mail && exit 0;)


funktioniert nicht. ( Wenn Logfile fehlt, mail an Server )

Immer wenn exit ins Spiel kommt, funktioniert das verkettete test Exit nicht so wie es soll. (Siehe oben)

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

( Wenn Logfile fehlt, mail an Server )

Ist aber soweit ich das sehen kann falsch: 'test ! -f $log' liefert true, wenn die Log-Datei /nicht/ vorhanden ist. Da das mit || verodert ist, wird der Rest nur durchgeführt, wenn die Log-Datei vorhanden ist.

echo -e "Cron - $server \n\n  Download - Logfile ($log) nicht vorhanden" &2>/dev/null

Sicher, dass du '&2>/dev/null' meinst? Das führt dazu, dass echo im Hintergrund ausgeführt wird. Ich denke du meintest '2>/dev/null' Ist aber so oder so überflüssig, da weder 'echo' in dem Fall irgendwas auf STDERR schreiben wird, noch die Ausgabe auf STDERR an mail gepipt wird.

Das '&& exit 0' ist übrigens auch völlig überflüssig.

funktioniert nicht.

Da ich nicht weiß, was genau unter „funktioniert nicht” zu verstehe ist, kann ich dazu leider nichts sagen. Aber ich würde dir, nicht nur aus Gründen der Lesbarkeit dazu raten IF-Then-Else zu verwenden.

Antworten |