ksh使用逻辑OR验证字符串

时间:2012-02-20 15:46:38

标签: shell ksh

我在ksh中编写一个脚本,需要检查变量是否设置为两个可接受的值之一。我有以下代码,但是当我输入有效值时,例如“C”我收到错误消息(非有效值):

if  [[ "$Mode" != "C" ]] || [[ "$Mode" != "M" ]] 
then

   echo ""
   echo "*Not a valid value*"

   exit 2;

fi

我不确定为什么它在字符串比较上失败,我已经尝试了语法上的变种但仍然没有得到任何地方,任何帮助都会非常感激。

2 个答案:

答案 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所示)。

我希望这会有所帮助。