Проверить несколько файловых условий одним махом (BASH)?

Часто при написании для оболочки bash необходимо проверить, существует ли файл (или каталог) (или не существует) ) и предпримите соответствующие действия. Наиболее распространенными среди этих тестов являются ...

-e - файл существует, -f - файл является обычным файлом (не каталогом или файлом устройства), -s - размер файла не равен нулю, -d - файл является каталогом, -r - файл имеет разрешение на чтение, -w - файл имеет запись, или -x разрешение на выполнение (для пользователя, выполняющего тест)

Это легко подтверждается, как показано в этом доступном для записи каталоге ....

#/bin/bash

if [ -f "/Library/Application Support" ]; then
echo 'YES SIR -f is fine'
else echo 'no -f for you'
fi

if [ -w "/Library/Application Support" ]; then
echo 'YES SIR -w is fine'
else echo 'no -w for you'
fi

if [ -d "/Library/Application Support" ]; then
echo 'YES SIR -d is fine'
else echo 'no -d for you'
fi

➝ нет - f для вас ✓
➝ ДА SIR -w в порядке ✓
➝ ДА SIR -d в порядке ✓

Мой вопрос, хотя кажется очевидным и вряд ли будет невозможным - как просто объединить эти тесты, не выполняя их отдельно для каждого условия ... К сожалению ...

if [ -wd "/Library/Application Support" ]  
  ▶  -wd: unary operator expected

if [ -w | -d "/Library/Application Support" ]   
  ▶  [: missing `]'
  ▶  -d: command not found

if [ -w [ -d "/Library.... ]]   &  if [ -w && -d "/Library.... ] 
  ▶  [: missing `]'

➝ no -wd for you ✖
➝ нет -w | -d для вас ✖
➝ нет [-w [-d ..]] для вас ✖
➝ no -w && -d для вас ✖

Что мне здесь не хватает?

35
задан Alex Gray 2 August 2011 в 18:10
поделиться