Bash循环中的多个条件

问题描述 投票:0回答:1

我试图在bash中使用4个条件在一个简单的while循环中工作,但是在尝试了来自各种论坛的许多不同语法之后,我找不到解决方案。当我写“ Prod”或“ Dev”或“ Admin”时,我会停留在循环中。

while [ -z $vmProfil ] || [ $vmProfil != 'Prod' ] || [ $vmProfil != "Dev" ] || [ $vmProfil != "Admin" ]
do 
    read -p 'Choose vm profil between Prod, Dev or Admin :' vmProfil
done
bash loops while-loop boolean-logic multiple-conditions
1个回答
2
投票

您正在使用||,而您应该使用&&;无论vmProfil的值如何,至少!=个条件中的一个必须为真。

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

您还可以检查否定检查结果是否为真。

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

不过,我将其写为一个带有明确中断的无限循环。

while :; do
  read -p '...' vmProfil
  case $vmProfil in
    Prod|Dev|Admin) break ;;
  esac
done
© www.soinside.com 2019 - 2024. All rights reserved.