web-dev-qa-db-ja.com

コマンドではなく出力をbashで比較する

リモートファイルを読み取り、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の周りで「」または「」を使用しようとしましたが、出力を比較するためにこれを取得できないようです。何が間違っているのですか?ありがとうございます

11
moztech

試してみてください。

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

これはうまくいくはずです。

編集:コードで==と!=が逆になっていると思います。

22

私はそれがこのようになるべきだと思います:

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

角かっこと値の間のスペースは重要です!

8
Mithrandir

[はbash構文ではなく、コマンドです。そのため、最初の引数$LOCALMD5との間にスペースが必要です。また、$REMOTEMD5]の間にもスペースが必要です。

7
Kyle Jones