Я хочу об'єднати кілька умов у оболонці if оператор та заперечувати комбінацію. У мене є такий робочий код для простого поєднання умов:
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
# do stuff with the files
fi
Це чудово працює. Якщо я хочу заперечувати це, я можу використовувати наступний робочий код:
if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
echo "Error: You done goofed."
exit 1
fi
# do stuff with the files
Це також працює як очікувалося. Однак мені здається, що я не знаю, що насправді мають круглі дужки. Я хочу використати їх лише для групування, але чи це насправді нерест нижньої оболонки? (Як я можу сказати?) Якщо так, чи є спосіб групувати умови, не будуючи нересурс?
if [[ ! -f file1 ]] && [[ ! -f file2 ]]; then
if [ ! 1 -eq 2 ] && [ ! 2 -eq 3 ]; then echo yep; fi
і це працює. Я завжди завжди пишу тести з подвійними дужками як питання звички. Крім того, щоб переконатися, що це не так bash
, я додатково перевірив, if /bin/test ! 1 -eq 2 && /bin/test ! 2 -eq 3 ; then echo yep; fi
і це також працює.
[ ! -e file/. ] && [ -r file ]
каталоги. заперечуйте це як завгодно. Звичайно, саме це і -d
робить.
if ! [ -f file1 ] || ! [ -f file 2 ] || ! [ -f file3 ] ; then
але мені хотілося б більш загальної відповіді.