Je veux combiner plusieurs conditions dans une instruction shell if et annuler la combinaison. J'ai le code de travail suivant pour une combinaison simple de conditions:
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
# do stuff with the files
fi
Cela fonctionne bien. Si je veux l'annuler, je peux utiliser le code de travail suivant:
if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
echo "Error: You done goofed."
exit 1
fi
# do stuff with the files
Cela fonctionne également comme prévu. Cependant, il me vient à l'esprit que je ne sais pas ce que les parenthèses font réellement là-bas. Je veux les utiliser uniquement pour le regroupement, mais est-ce réellement un sous-shell? (Comment savoir?) Dans l'affirmative, existe-t-il un moyen de regrouper les conditions sans engendrer un sous-shell?
if [[ ! -f file1 ]] && [[ ! -f file2 ]]; then
if [ ! 1 -eq 2 ] && [ ! 2 -eq 3 ]; then echo yep; fi
et ça marche. J'écris juste toujours des tests à double accolade par habitude. De plus, pour m'assurer que ce n'est pas le cas bash
, j'ai encore testé if /bin/test ! 1 -eq 2 && /bin/test ! 2 -eq 3 ; then echo yep; fi
et cela fonctionne aussi de cette façon.
[ ! -e file/. ] && [ -r file ]
supprimera les répertoires. niez-le comme vous le souhaitez. bien sûr, c'est ce qui -d
fait.
if ! [ -f file1 ] || ! [ -f file 2 ] || ! [ -f file3 ] ; then
mais je voudrais une réponse plus générale.