J'ai une fonction bash Shell 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?
EDIT
Aussi - je veux être sûr que même si la première condition est vraie, toutes les autres conditions seront toujours évaluées.
Merci,
Lancez d'abord les commandes, puis vérifiez si au moins l'une d'entre elles a réussi.
#!/bin/bash
success=0
do_something arg1 && success=1
do_something arg2 && success=1
do_something arg3 && success=1
if ((success)); then
printf 'Success! At least one of the three commands succeeded\n'
fi
Utilisez des barres obliques inverses.
if [ $(do_something "arg1") ] || \
[ $(do_something "arg2") ] || \
[ $(do_something "arg3") ]
then
echo "OK"
else
echo "NOT OK"
fi
EDIT
De plus, 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 déclaration if. À la place, vous pouvez utiliser une boucle for qui itère sur les arguments et les évalue séparément. Quelque chose comme:
do_something() {
for x in "$@"
do
if [need to do something on $x]
then
do it
else
echo "no action required on $x"
fi
done
}
La syntaxe correcte est la suivante:
if do_something "arg1" || \
do_something "arg2" || \
do_something "arg3"
then
echo "OK"
else
echo "NOT OK"
fi
\
est utilisé pour indiquer au shell qu'une commande continue à la ligne suivante.
EDIT: Je pense que cela devrait faire ce que vous voulez:
#!/bin/bash
do_something() {
if [need to do something on $1]
then
do it
echo "OK"
else
echo "NOT OK"
fi
}
do_something "arg1"
do_something "arg2"
do_something "arg3"