我正在尝试使用“if”和“OR”执​​行两个字符串比较

时间:2014-09-03 13:54:53

标签: bash

我是bash的新手,我正在尝试使用or语句进行两次字符串比较。任何人都可以告诉我哪里出错了?

    echo $DEVICETYPE
    FILEHEADER=ANDROID
    if [[ "$DEVICETYPE" == "iPad" ] || ["$DEVICETYPE" == "iPhone" ]];
        then
            $FILEHEADER = IOS
    fi
    echo $FILEHEADER
  
    
      

ipad公司

             

机器人

    
  

1 个答案:

答案 0 :(得分:2)

正如其他人所说,我应该指出这一点是完整的。声明:

echo $FILEHEADER = IOS

只会打印出由FILEHEADER跟随的= IOS变量的内容。这不会做任务。分配如下进行,变量名称不带$,后跟您要分配给它的内容。请注意=周围没有空格。在你的例子中应该是:

FILEHEADER=IOS

关于代码的表达式:

if [[ "$DEVICETYPE" == "iPad" ] || ["$DEVICETYPE" == "iPhone" ]];

可以替换为:

if [ "$DEVICETYPE" == "iPad" ] || [ "$DEVICETYPE" == "iPhone" ];

您需要移除外部支架。此外,还有一个微妙的变化。您["$DEVICETYPE"后需要[添加空格,因此它变为[ "$DEVICETYPE"。如果你想对逻辑表达式进行分组,那么你可以使用括号,这样它就可以用这种方式编写(虽然它没有改变这个例子的语义):

if ([ "$DEVICETYPE" == "iPad" ] || [ "$DEVICETYPE" == "iPhone" ]);

如果您只是针对bash,那么以下可能是表达它的更自然的方式。不幸的是,这种形式可能无法在其他shell中使用(它不太便携):

if [[ $DEVICETYPE == "iPad" || $DEVICETYPE == "iPhone" ]];

如果您担心运营商优先权,您可以随时通过以下方式澄清:

if [[ ($DEVICETYPE == "iPad") || ($DEVICETYPE == "iPhone") ]];

虽然没有被问到但是可能有价值的是要意识到可以使用通配符星号(*)来检查启动与iPhone或iPad的任何内容,如下例所示:

if [[ ($DEVICETYPE == "iPad"*) || ($DEVICETYPE == "iPhone"*) ]];

因此,如果DEVICETYPEiPhone 2iPhone2iPad Mini,那么它们也会匹配。星号表示匹配任何其他字符。