リモートファイルを読み取り、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の周りで「」または「」を使用しようとしましたが、出力を比較するためにこれを取得できないようです。何が間違っているのですか?ありがとうございます
試してみてください。
if [ "$LOCALMD5" == "$REMOTEMD5" ]
これはうまくいくはずです。
編集:コードで==と!=が逆になっていると思います。
私はそれがこのようになるべきだと思います:
#!/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
角かっこと値の間のスペースは重要です!
[
はbash構文ではなく、コマンドです。そのため、最初の引数$LOCALMD5
との間にスペースが必要です。また、$REMOTEMD5
と]
の間にもスペースが必要です。