首页 > 解决方案 > 在while循环中打击多个条件

问题描述

我试图让一个简单的while循环在使用四个条件的bash中工作,但是在尝试了各种论坛的许多不同语法之后,我找不到解决方案。当我写“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

标签: bashloopswhile-loopboolean-logicmultiple-conditions

解决方案


你正在使用||你应该使用的地方&&;不管有什么值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

推荐阅读