Как написать несколько, если условия лестница в сценарии bash? - PullRequest
1 голос
/ 19 июня 2019

Я новичок в написании сценариев bash, хочу иметь, если условие лестница
Я читаю строку, на основе которой я хочу, чтобы корректное условие if было обработано.

Логика следующая -

Если строка содержит подстроку -deploy, только тогда разрешите ей ввести лестницу условия if.

Если строка содержит подстроки -functions и -layer, то вызывать должен только мой 1-й, если блок условий,

проверка elsif для -functions подстроки

проверка elsif для -layer подстроки

До сих пор я придумал следующий код:

commitMessage='[STABLE] -deploy -functions [one,two] -layer some commit message'

if [[ ($commitMessage == *"deploy"* ) && ($commitMessage == *"functions"*) || ($commitMessage == *"layer"*) ]] ; then
  if [[ ($commitMessage == *"functions"*) && ($commitMessage == *"layer"*) ]] ; then
    echo 'functions and layer'
  fi

  elsif [[ $commitMessage == *"functions"* ]] ; then
    echo 'functions only'
  fi

  elsif [[ $commitMessage == *"layer"* ]] ; then
    echo 'layer only'
  fi
fi

Я получаю синтаксическую ошибку для elsif -

syntax error near unexpected token `elif'

Я имею в виду это, но не понимаю, что я делаю неправильно -
Bash IF: несколько условий

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Проблема с вашим кодом заключается в использовании некорректных терминаторов предложения if внутри вложенного предложения if и использовании неверного ключевого слова для else, если выполняется ветвление, т.е. elif вместо elsif (последнее используется в Python) , Смотри https://ideone.com/1sw0q5

Но оператор case в этом случае был бы более читабельным, и его можно записать как

if [[ $commitMessage == *"-deploy"* ]]; then
     case "$commitMessage" in
         *"-functions"*"-layer"*) echo 'functions and layer' ;;
         *"-functions"*) echo 'functions only' ;;
         *"-layer"*) echo 'layer only' ;;
         *) echo 'no match'
     esac
fi
0 голосов
/ 19 июня 2019

Я считаю, что вы не должны использовать elsif, вместо этого вы должны использовать elif.Вы можете сослаться на следующую документацию.https://tecadmin.net/tutorial/bash-scripting/bash-if-else-statement/

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