Chcę połączyć wiele warunków w instrukcji if powłoki i zanegować kombinację. Mam następujący kod roboczy dla prostej kombinacji warunków:
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
# do stuff with the files
fi
To działa dobrze. Jeśli chcę to zanegować, mogę użyć następującego działającego kodu:
if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
echo "Error: You done goofed."
exit 1
fi
# do stuff with the files
Działa to również zgodnie z oczekiwaniami. Jednak przychodzi mi do głowy, że nie wiem, co właściwie robią nawiasy. I chcą , aby ich używać tylko do grupowania, ale jest to faktycznie tarło podpowłoce? (Jak mogę to stwierdzić?) Jeśli tak, czy istnieje sposób na grupowanie warunków bez odradzania podpowłoki?
if [[ ! -f file1 ]] && [[ ! -f file2 ]]; then
if [ ! 1 -eq 2 ] && [ ! 2 -eq 3 ]; then echo yep; fi
i działa. Po prostu zawsze piszę testy z podwójnymi nawiasami klamrowymi w ramach nawyku. Ponadto, aby upewnić się, że tak nie jest bash
, przeprowadziłem dalsze testy if /bin/test ! 1 -eq 2 && /bin/test ! 2 -eq 3 ; then echo yep; fi
i tak też działa.
[ ! -e file/. ] && [ -r file ]
spowoduje upuszczenie katalogów. neguj to, jak chcesz. oczywiście, że -d
tak.
if ! [ -f file1 ] || ! [ -f file 2 ] || ! [ -f file3 ] ; then
ale chciałbym bardziej ogólnej odpowiedzi.