Только что обновил код ... Я каждый раз выхожу из последовательности "else". Вы можете скачать файл update.sh с моего сервера. он содержит только эхо "Hallo update"
Обновленный код (03.11.2015)
#/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 содержит только MD-сумму предыдущего файла update.sh для сравнения с новым загруженным (чтобы проверить, применяются ли какие-либо изменения в системе). Этот сценарий собирается деполировать тот же файл update.sh на несколько серверов debian ...
Вы также можете использовать cmp
. На странице руководства - cmp - compare two files byte by byte
. Он завершается с 0, если файлы совпадают.
if cmp -s "$oldfile" "$newfile" ; then echo "Nothing changed" else echo "Something changed" fi
Будь проще. Diff возвращает 1 при разнице и 0 при отсутствии разницы. Используйте оператор if. Вот как вы можете отличить два файла
if diff file1 file2 > /dev/null
then
echo "No difference"
else
echo "Difference"
fi
Чтобы решить ВАШУ проблему (в которой вы сравниваете разницу между двумя переменные в приведенном выше примере используйте это (двойное равенство - это то, что вам не хватает).
#/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
$ 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
Я не могу следовать вашему коду, но обычно использую команду
cd $DIR_WITH_ONE_FILE
if (cd $DIR_WITH_OTHER_FILE ; md5sum $FILE) | md5sum -c --status
then
echo "same"
else
echo "different"
fi
Это зависит от двух файлов с одинаковыми именами, но находящихся в разных каталогах. YMMV.
Может быть, ваша первая переменная содержит команду в виде строки, а не возвращаемое значение. Я думаю, вы забыли команду `around 'в переменной 1.