我在ksh中编写一个脚本,需要检查变量是否设置为两个可接受的值之一。我有以下代码,但是当我输入有效值时,例如“C”我收到错误消息(非有效值):
if [[ "$Mode" != "C" ]] || [[ "$Mode" != "M" ]]
then
echo ""
echo "*Not a valid value*"
exit 2;
fi
我不确定为什么它在字符串比较上失败,我已经尝试了语法上的变种但仍然没有得到任何地方,任何帮助都会非常感激。
答案 0 :(得分:4)
你的逻辑是有缺陷的。
if [[ "$Mode" != "C" ]] && [[ "$Mode" != "M" ]]
then
echo ""
echo "*Not a valid value*"
exit 2;
fi
答案 1 :(得分:3)
if ! [[ "$Mode" == "C" || "$Mode" == "M" ]] ; then
echo ""
echo "*Not a valid value*"
exit 2;
fi
我认为这是测试多个值的更简单方法。我喜欢把它想象一下'如果Mode不在C,M或......的列表中;那么......“我看到初学者发布的代码和你的一样(当我是初学者的时候我自己做了),因为那时你的心理模型是'如果模式不是C或模式不是M那么......',但是你真的需要'AND'代替(如jlliagre所示)。
我希望这会有所帮助。