Quiero combinar varias condiciones en una instrucción if de shell y negar la combinación. Tengo el siguiente código de trabajo para una combinación simple de condiciones:
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
# do stuff with the files
fi
Esto funciona bien Si quiero negarlo, puedo usar el siguiente código de trabajo:
if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
echo "Error: You done goofed."
exit 1
fi
# do stuff with the files
Esto también funciona como se esperaba. Sin embargo, se me ocurre que no sé qué hacen los paréntesis en realidad allí. Yo quiero a utilizarlos sólo para la agrupación, pero ¿es realmente el desove un subnivel? (¿Cómo puedo saberlo?) Si es así, ¿hay alguna forma de agrupar las condiciones sin generar una subshell?
if [[ ! -f file1 ]] && [[ ! -f file2 ]]; then
if [ ! 1 -eq 2 ] && [ ! 2 -eq 3 ]; then echo yep; fi
y funciona. Siempre escribo pruebas con llaves dobles como una costumbre. Además, para garantizar que no lo sea bash
, lo probé más if /bin/test ! 1 -eq 2 && /bin/test ! 2 -eq 3 ; then echo yep; fi
y también funciona de esa manera.
[ ! -e file/. ] && [ -r file ]
directorios. negarlo como quieras. por supuesto, eso es lo que -d
hace.
if ! [ -f file1 ] || ! [ -f file 2 ] || ! [ -f file3 ] ; then
pero me gustaría una respuesta más general.