Ich habe eine Bash-Shell-Funktion, die ein Argument aufnimmt und bei Bedarf etwas darauf ausführt.
do_somthing() {
if [need to do something on $1]
then
do it
return 0
else
return 1
fi
}
Ich möchte diese Methode mit mehreren Argumenten aufrufen und prüfen, ob mindestens eines davon erfolgreich war.
Ich habe versucht, etwas wie:
if [ do_something "arg1" ||
do_something "arg2" ||
do_something "arg3" ]
then
echo "OK"
else
echo "NOT OK"
fi
Was wird die richtige Syntax dafür sein?
EDIT
Also - Ich möchte sicherstellen, dass auch wenn die erste Bedingung erfüllt ist, alle anderen Bedingungen weiterhin ausgewertet werden.
Vielen Dank,
Antworten:
Führen Sie zuerst die Befehle aus und prüfen Sie dann, ob mindestens einer von ihnen erfolgreich war.
quelle
if ((success))
auswertet , um etwas anderes alsif success
. Ich bin verwirrt :)((...))
ist ein arithmetischer Befehl. Wenn das Ergebnis ungleich Null ist, wird true (0) zurückgegeben. Wenn das Ergebnis innerhalb 0 ist, wird false (1) zurückgegeben. "Erfolg" wird als Variable behandelt, die eine Zahl enthalten soll. Siehe mywiki.wooledge.org/ArithmeticExpressionVerwenden Sie Backslashes.
BEARBEITEN
Außerdem möchte ich sicherstellen, dass alle anderen Bedingungen auch dann ausgewertet werden, wenn die erste Bedingung erfüllt ist.
Das ist in nur einer if-Anweisung nicht möglich. Stattdessen können Sie eine for-Schleife verwenden, die die Argumente durchläuft und separat auswertet. So etwas wie:
quelle
[: do_something: unary operator expected
[ expr1 ] || [ expr2 ]
statt[ expr1 || expr2 ]
.do_something "arg1"
als zwei Argumente interpretiert wird, während der Ausdruck unär sein sollte. Jede Art und Weise der Herstellungdo_something "arg1"
als ein Argument zu bewerten?if [ $(do_something "arg1") ]
.Die korrekte Syntax lautet:
\
wird verwendet, um der Shell mitzuteilen, dass ein Befehl in der nächsten Zeile fortgesetzt wird.EDIT : Ich denke das sollte machen was du willst:
quelle
[: too many arguments