J'ai une fonction shell bash qui prend un argument et effectue quelque chose dessus si nécessaire.
do_somthing() {
if [need to do something on $1]
then
do it
return 0
else
return 1
fi
}
Je veux appeler cette méthode avec plusieurs arguments et vérifier si au moins l'un d'entre eux a réussi.
J'ai essayé quelque chose comme:
if [ do_something "arg1" ||
do_something "arg2" ||
do_something "arg3" ]
then
echo "OK"
else
echo "NOT OK"
fi
Quelle sera la syntaxe correcte pour cela?
MODIFIER
également - Je veux m'assurer que même si la première condition est vraie, toutes les autres conditions seront toujours évaluées.
Merci,
Réponses:
Exécutez d'abord les commandes, puis vérifiez si au moins l'une d'elles a réussi.
la source
if ((success))
évalue à quelque chose de différent deif success
. Je suis confus :)((...))
est une commande arithmétique. Si le résultat à l'intérieur est différent de zéro, il renvoie vrai (0). Si le résultat à l'intérieur est 0, il renvoie false (1). "succès" est traité comme une variable qui devrait contenir un nombre. Voir mywiki.wooledge.org/ArithmeticExpressionUtilisez des barres obliques inverses.
ÉDITER
Aussi - je veux m'assurer que même si la première condition est vraie, toutes les autres conditions seront toujours évaluées.
Ce n'est pas possible dans une seule instruction if. Au lieu de cela, vous pouvez utiliser une boucle for qui itère sur les arguments et les évalue séparément. Quelque chose comme:
la source
[: do_something: unary operator expected
[ expr1 ] || [ expr2 ]
au lieu de[ expr1 || expr2 ]
.do_something "arg1"
est interprété comme deux arguments alors que l'expression devrait être unaire. Une manière de fairedo_something "arg1"
être évaluée comme un argument?if [ $(do_something "arg1") ]
.La syntaxe correcte est:
\
est utilisé pour indiquer au shell qu'une commande continue sur la ligne suivante.EDIT : Je pense que cela devrait faire ce que vous voulez:
la source
[: too many arguments
Je préfère:
la source
\n
caractère, donc votreif
déclaration générerait des erreurs etdo_something
ne sont pas des noms de commande, donc plus d'erreursdo_something
est une fonction bien sûr.do_something
doit être fonction ou commande, quoi d'autre devrait-il être? De plus je ne vois pas où cela générerait un\n
personnage sauf après avoir fait écho au résultat et cela est attendu ...