Часто при написании для оболочки 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 для вас ✓
IR ДА СЭР -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 `]'
➝ нет -wd для вас ✖
➝ нет -w |-d для вас ✖
➝ нет [-w [-d ..]] для вас ✖
➝ нет -w && -d для вас ✖
Чего мне здесь не хватает?