bash - 在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
解决方案
你正在使用||
你应该使用的地方&&
;不管有什么值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
推荐阅读
- ms-access - 使用未绑定的表单输入数据
- java - Android:如何保护我的付费应用免受未注册用户的侵害?
- python - 如何修复“TypeError:'KeyCode' 对象不可下标”
- forms - 具有许多表格的独特形式
- wpf - 是否可以像使用 WPF 3D Material.BackMaterial 属性一样在网格背面自动渲染纹理?
- jar - Jboss wifly 模块 - 如何重用注册为模块的库
- python - 'DataFrame' 对象是可变的,因此它们不能被散列——每当我试图为多列创建虚拟变量时就会出现这种情况
- keras - MNIST 数据库的推理
- python - 如何将 tf-idf 应用于整个数据集(训练和测试数据集),而不是仅在朴素贝叶斯分类器类中训练数据集?
- java - Rest API 调用返回带有 LocalDate 的错误