Bash: Как реализовать последовательную проверку нескольких блоков переключения регистра? - PullRequest
0 голосов
/ 07 марта 2020

Я хочу, чтобы первый блок переключения регистра оценивал 1-й и 3-й позиционные аргументы. Если 1-й предоставленный позиционный аргумент не определен, то я хочу перейти к следующему блоку переключения регистра, чтобы оценить ТОЛЬКО 3-й позиционный аргумент.

мой код выглядит следующим образом:

case "$1" in
    X)   case "$3" in
            -d) if [[ "$4" =~ ^[A-Z]+-[0-9]+$ ]]; then
                        CreateMarketDir;
                        SymlinkMarketData;
                    else
                        CreateMarketDir;
                    fi;;
         esac
    *)   echo "Exiting the first Case Block"
         exit;;
esac

case "$3" in
     -c) if [[ "$4" =~ ^[A-Z]+-[0-9]+$ ]]; then
             CreateDCDir;
             SymlinkDCData;
         else
             CreateDCDir;
         fi;;
      *) echo "Please use a valid argument"
          exit;;
esac

Тем не менее, работает только первый блок переключения регистра - например, все работает нормально:

./script.sh X foo -d

Но когда я пытаюсь запустить со следующими аргументами:

./script.sh foo bar -c

I получить этот вывод:

Please use a valid argument

Я предполагаю, что если 1-й позиционный аргумент не X, то сценарий должен проверить следующий блок переключения регистра и оценить 3-й позиционный аргумент. Но, видимо, это не тот случай.

Как мне реализовать последовательную проверку нескольких блоков переключения регистра?

Спасибо

1 Ответ

0 голосов
/ 07 марта 2020

Как правильно указал @Barmar, проблема заключалась в том, что первый esac отсутствовал ;; Кроме того, если сценарий должен go последовательно проходить через отдельные блоки Case-Switch, тогда exit;; должен быть удаленным из первого блока Case, иначе весь скрипт будет остановлен

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