Bash сравнить вывод, а не команду - PullRequest
9 голосов
/ 09 января 2012

Попытка создать сценарий для чтения удаленного файла и проверки контрольной суммы 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 ]

21 голосов
/ 09 января 2012

Постарайтесь;

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

, который должен работать лучше.

Редактировать: Я думаю, что вы получили == и! = В вашем коде поменялись местами.

8 голосов
/ 09 января 2012

Я думаю, это должно быть так:

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

Важно расстояние между скобкой и значением!

6 голосов
/ 09 января 2012

[ это не синтаксис bash, это команда. Поэтому между ним и его первым аргументом должен быть пробел $LOCALMD5. Там также должен быть пробел между $REMOTEMD5 и ].

...