Bash比较输出而不是命令

时间:2012-01-09 18:51:01

标签: bash string-comparison

尝试创建一个脚本来读取远程文件并检查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周围使用'或',但似乎从来没有能够比较输出。我做错了什么? 感谢

3 个答案:

答案 0 :(得分:21)

尝试;

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

应该更好。

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

答案 1 :(得分:8)

我认为应该是这样的:

#!/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

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

答案 2 :(得分:6)

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