【问题标题】:Unix If Then not working inside Do LoopUnix If Then 在 Do Loop 中不起作用
【发布时间】:2018-04-06 14:07:00
【问题描述】:

我试图通过在我的 DO DONE 语句中实现 IF THEN ELIF 语句来更改与 $i 的不同值相对应的特定变量值。我花了几个小时试图解决这个问题,但结果总是为campaign_data_id 和companion_id 重复相同的值。 IF THEN 之外的其他值确实可以正常工作。有人知道解决办法吗?

#!/bin/sh 
for i in brand1 brand2 brand3 brand4 brand5 brand6 
 do 
 brand=$i
 campaign_id="$brand"_version2
 source_table=db_name."$brand"_table
 if [ "$brand"=brand1 ] 
    then 
      campaign_data_id=2059 
      companion_id=000495 
   elif [ $brand=brand2 ] 
    then 
      campaign_data_id=2118 
      companion_id=004994 
   elif [ $brand==brand3 ] 
    then 
      campaign_data_id=2181 
      companion_id001224 
   elif [ $brand==brand4 ] 
    then 
      campaign_data_id=2061 
      companion_id=000973 
   elif [ $brand==brand5 ] 
    then 
      campaign_data_id=2131 
      companion_id=003453 
   elif [ $brand==brand6 ] 
    then 
      campaign_data_id=2113 
      companion_id=003453 
   else 
    echo SETTINGS NOT COMPLETE 
fi

echo $brand $campaign_id $source_table $campaign_data_id $companion_id
done

这是输出(不正确)

brand1 brand1_version2 db_name.brand1_table 2059 000495
brand2 brand2_version2 db_name.brand2_table 2059 000495
brand3 brand3_version2 db_name.brand3_table 2059 000495
brand4 brand4_version2 db_name.brand4_table 2059 000495
brand5 brand5_version2 db_name.brand5_table 2059 000495
brand6 brand6_version2 db_name.brand6_table 2059 000495

【问题讨论】:

    标签: unix for-loop if-statement do-loops


    【解决方案1】:

    您的错误在于您在 ELSEIF 条件中使用的文本比较。比较两个字符串时,都应该用引号引起来,并且单个“=”符号是正确的比较器。见Reference。我用空格包围了字符串,不确定是否需要,但这是我的习惯。还更正了第 18 行的错字,其中缺少“=”。这应该给出正确的输出:

    #!/bin/sh
    for i in brand1 brand2 brand3 brand4 brand5 brand6
      do
        brand=$i
        campaign_id=${brand}_version2
        source_table=db_name."$brand"_table
        if [ "${brand}" = "brand1" ]
          then
          campaign_data_id=2059
          companion_id=000495
        elif [ "${brand}" = "brand2" ]
          then
          campaign_data_id=2118
          companion_id=004994
        elif [ "${brand}" = "brand3" ]
          then
          campaign_data_id=2181
          companion_id=001224
        elif [ "${brand}" = "brand4" ]
          then
          campaign_data_id=2061
          companion_id=000973
        elif [ "${brand}" = "brand5" ]
          then
          campaign_data_id=2131
          companion_id=003453
        elif [ "${brand}" = "brand6" ]
          then
          campaign_data_id=2113
          companion_id=003453
        else
          echo SETTINGS NOT COMPLETE
    fi
    echo $brand $campaign_id $source_table $campaign_data_id $companion_id
    done
    

    【讨论】:

    • 是的!!!!这行得通!谢谢你的解释。下次我会知道在字符串周围添加 { } 和“”。再次感谢!非常感谢。
    • 现在,如果你能接受我的回答;)@nihaodave 周末愉快!
    猜你喜欢
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    相关资源
    最近更新 更多