Bash Несколько условий в цикле - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь получить простой, пока l oop, работающий в bash, который использует четыре условия, но после попытки использовать много разных синтаксисов на разных форумах, я не могу найти решение. Когда я пишу «Prod» или «Dev» или «Admin», я остаюсь в l oop.

while [ -z $vmProfil ] || [ $vmProfil != 'Prod' ] || [ $vmProfil != "Dev" ] || [ $vmProfil != "Admin" ]
do 
    read -p 'Choose vm profil between Prod, Dev or Admin :' vmProfil
done

1 Ответ

3 голосов
/ 10 февраля 2020

Вы используете || там, где вы должны использовать &&; независимо от того, какое значение имеет vmProfil, по крайней мере одно из условий != должно быть истинным.

while [ -z "$vmProfil" ] || <b>{</b> [ "$vmProfil" != 'Prod' ] <b>&&</b> [ "$vmProfil" != "Dev" ] <b>&&</b> [ "$vmProfil" != "Admin" ]<b>; }</b>

Вы также можете проверить отрицание результата проверки, если какое-либо условие истинно.

while [ -z "$vmProfil" ] || <b>! {</b> [ "$vmProfil" <b>=</b> 'Prod' ] || [ "$vmProfil" <b>=</b> "Dev" ] || [ "$vmProfil" <b>=</b> "Admin" ]; <b>}</b>

Я бы написал это как бесконечный l oop с явным разрывом.

while :; do
  read -p '...' vmProfil
  case $vmProfil in
    Prod|Dev|Admin) break ;;
  esac
done
...