【问题标题】:Compare output rather than command比较输出而不是命令
【发布时间】:2012-01-09 18:51:01
【问题描述】:

尝试创建一个脚本来读取远程文件并检查 md5 校验和并在不匹配时发出警报,但出现我无法理解的错误。

#!/bin/sh
REMOTEMD5=$(ssh user@host 'md5sum file.txt')
LOCALMD5=$(md5sum 'file.txt')
if [$LOCALMD5 !== $REMOTEMD5]
then
  echo "all OK"
else
  echo -e "no match, Local:"$LOCALMD5"\nRemote:"$REMOTEMD5
fi

这将返回line 4: [6135222a12f06b2dfce6a5c1b736891e: command not found

我尝试在 $LOCALMD5 周围使用 ' 或 " 但似乎永远无法得到它来比较输出。我做错了什么? 谢谢

【问题讨论】:

    标签: bash string-comparison


    【解决方案1】:

    试试;

    if [ "$LOCALMD5" == "$REMOTEMD5" ]
    

    应该会更好。

    编辑:我认为您的代码中有 == 和 != 颠倒了。

    【讨论】:

    • 感谢您的尝试,但这仍然返回找不到命令
    • 奇怪,运行它时对我来说很好。现在具体的错误信息是什么?
    • 很好,今天我已经尝试了很多方法,我的眼睛在告诉我谎言。现在可以正常工作了
    • @moztech 另外,请尝试使用[[ 而不是[。阅读this .. 这是好东西 :)
    • 您必须在 [ 和 ] 之后有空格。提示在以 [ 开头的错误消息中
    【解决方案2】:

    我觉得应该是这样的:

    #!/bin/sh
    REMOTEMD5=$(ssh user@host 'md5sum file.txt')
    LOCALMD5=$(md5sum 'file.txt')
    if [ "$LOCALMD5" == "$REMOTEMD5" ]
    then
      echo "all OK"
    else
      echo -e "no match, Local:"$LOCALMD5"\nRemote:"$REMOTEMD5
    fi
    

    括号和值之间的空格很重要!

    【讨论】:

    • 非常接近,我现在收到no match, Local: 6135222a12f06b2dfce6a5c1b736891e file.txt Remote: 6135222a12f06b2dfce6a5c1b736891e file.txt
    • 这些值是相同的 -> 你的条件说如果值不相等,脚本应该打印 ok ....,对我来说似乎很好!
    • 谢谢,正如@JoachimIsaksson 所指出的,我的逻辑与之前的尝试以及一些错误代码相反
    • 正如 cmets 中已经提到的,!= 必须是 ==。我会自己编辑答案,但 StackOverflow 要求我进行至少 6 个字符的更改。
    【解决方案3】:

    [ 不是 bash 语法,它是一个命令。所以你必须在它和它的第一个参数$LOCALMD5之间有一个空格。 $REMOTEMD5] 之间也需要有一个空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-09
      • 2011-12-12
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      相关资源
      最近更新 更多