コードを更新しました...「else」シーケンスで毎回外に出ます。私のサーバーからupdate.shファイルをダウンロードできます。エコー「ハロー更新」のみが含まれています
更新されたコード(2015年3月11日)
#/bin/bash
updateoldmd5=`sed -n l globalupdate.aix`
updatenewmd5=`md5sum update.sh |cut -d ' ' -f 1`
if [ $updateoldmd5 = $updatenewmd5 ]
then
apt-get update
echo -e $(date) "Nothing to update on this System($(hostname))." >> globalupdate.log
wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
echo "Done"
else
chmod +x /root/update.sh
./root/update.sh
echo -e $(date) "System ($(hostname)) Updated." >> globalupdate.log
echo ""
md5sum update.sh |cut -d ' ' -f 1 > globalupdate.aix
echo "Update done"
#Get new update.sh file for next update check of the node system.
wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
fi
ちょうどあなたの通知のために。 globalupdate.aixファイルには、以前にダウンロードしたものと比較するために、以前のupdate.shファイルのMDsumのみが含まれています(変更がシステムに適用されているかどうかを確認するため)。このスクリプトは、同じupdate.shファイルを多数のdebianサーバーにdepolyしようとしています...
cmp
を使用することもできます。マニュアルページから-cmp - compare two files byte by byte
。ファイルが一致する場合、0で終了します。
if cmp -s "$ oldfile" "$ newfile";その後、 echo "変更なし" else echo "変更あり" fi
単純にする。 Diffは、差異の場合は1を、差異がない場合は0を返します。 ifステートメントを使用します。 これは、2つのファイルの違いを確認する方法です
if diff file1 file2 > /dev/null
then
echo "No difference"
else
echo "Difference"
fi
あなたの問題を修正するには(上の例で2つの変数の違いを比較する場合)、これを使用します(二重の等号は欠けているものです)。
#/bin/bash
updateoldmd5=`sed -n l globalupdate.aix`
updatenewmd5=`md5sum update.sh |cut -d ' ' -f 1`
if [ "$updateoldmd5" == "$updatenewmd5" ]
then
apt-get update
echo -e $(date) "Nothing to update on this System($(hostname))." >> globalupdate.log
wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
echo "Done"
else
chmod +x /root/update.sh
./root/update.sh
echo -e $(date) "System ($(hostname)) Updated." >> globalupdate.log
echo ""
md5sum update.sh |cut -d ' ' -f 1 > globalupdate.aix
echo "Update done"
#Get new update.sh file for next update check of the node system.
wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
fi
それはあなたの最初の変数がコマンドを文字列として含み、戻り値ではないかもしれません。変数1のコマンドの周りの `を忘れたと思います。
私はあなたのコードを追跡することはできませんが、私が通常使用するコマンドは
cd $DIR_WITH_ONE_FILE
if (cd $DIR_WITH_OTHER_FILE ; md5sum $FILE) | md5sum -c --status
then
echo "same"
else
echo "different"
fi
これは、同じ名前で異なるディレクトリにある2つのファイルに依存します。 YMMV。
$ echo abc > file1
$ echo abc > file2
$ sha1sum file1 file2
03cfd743661f07975fa2f1220c5194cbaff48451 *file1
03cfd743661f07975fa2f1220c5194cbaff48451 *file2
$ diff file1 file2
# (No output.)
$ diff --report-identical-files file1 file2
Files file1 and file2 are identical
$ diff -s file1 file2
Files file1 and file2 are identical