Bash比较输出而不是命令

moz*_*ech 10 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
Run Code Online (Sandbox Code Playgroud)

这回来了 line 4: [6135222a12f06b2dfce6a5c1b736891e: command not found

我尝试在$ LOCALMD5周围使用'或',但似乎从来没有能够比较输出.我做错了什么?谢谢

Joa*_*son 22

尝试;

if [ "$LOCALMD5" == "$REMOTEMD5" ]
Run Code Online (Sandbox Code Playgroud)

哪个应该更好.

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

  • 你必须在[和之前]之后有空格.提示位于错误消息中,该消息以[ (2认同)

Mit*_*dir 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
Run Code Online (Sandbox Code Playgroud)

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


Kyl*_*nes 7

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