BASH оператор ИЛИ - PullRequest
       4

BASH оператор ИЛИ

0 голосов
/ 14 июля 2020

Я хочу выполнить эхо, только если одна из папок не найдена? Однако AEM_SEGMENTSTORE_LOCATION_ AZURE обнаружен, но я все равно получаю «эхо не найдено»

 #!/bin/bash
    AEM_SEGMENTSTORE_LOCATION="/opt/day/${AEM_RUNMODE}/crx-quickstart/repository/segmentstore"
    AEM_SEGMENTSTORE_LOCATION_AZURE="/opt/day/crx-quickstart/repository/segmentstore"
     [[ ! -d ${AEM_SEGMENTSTORE_LOCATION} ]] || [[  ! -d ${AEM_SEGMENTSTORE_LOCATION_AZURE} ]] && echo "not found"

Ответы [ 2 ]

4 голосов
/ 14 июля 2020

В общем, не смешивайте || и &&. Приоритет - это не то, что вы ожидаете. a || b && c эквивалентно (a || b) && c, но a && b || c не то же самое, что (a && b) || c. Возьмите за привычку использовать правильный оператор if.

if [[ ! -d "$AEM_SEGMENTSTORE_LOCATION" || ! -d "$AEM_SEGMENTSTORE_LOCATION_AZURE" ]]; then
    echo "not found"
fi

или

if ! [[ -d "$AEM_SEGMENTSTORE_LOCATION" && -d "$AEM_SEGMENTSTORE_LOCATION_AZURE" ]]; then
    echo "not found"
fi
0 голосов
/ 14 июля 2020

Неправильный приоритет. Кажется, вы все равно ищете И. Вы можете легко исправить это, изменив его на

if [[ ! -d "$AEM_SEGMENTSTORE_LOCATION" ]] &&
[[ ! -d "$AEM_SEGMENTSTORE_LOCATION_AZURE" ]]
then
    echo "$0: not found" >&2
fi

Обратите внимание также на правильное использование кавычек для ваших переменных {см. Когда следует заключать в кавычки переменную оболочки ; фигурные скобки не заключаются в кавычки и здесь в основном бесполезны) и, вероятно, избегайте имен переменных в верхнем регистре, если это ваши частные переменные (верхний регистр зарезервирован для системных переменных). Наконец, сообщение диагностики c должно, вероятно, go соответствовать стандартной ошибке и включать имя сценария; вероятно, он также должен сказать что не было найдено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...