Как протестировать, если два данных файла идентичны?

Просто обновленный код... Я "еще" выхожу каждый раз на последовательность. Можно загрузить update.sh файл с моего сервера. это только содержит эхо, "Привет обновляют"

Обновленный код (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 файл только содержит MDsum предыдущего update.sh файла, для сравнения с новым загруженным одного (Чтобы проверить, применяются ли какие-либо изменения действительно на системы). Этот сценарий собирается развернуть тот же update.sh файл на буче debian серверов...

4
задан 11 March 2015 в 21:27
6 ответов

Может быть, ваша первая переменная содержит команду в виде строки, а не ее возвращаемое значение. Я думаю, вы забыли команду `around 'в переменной 1.

0
ответ дан 3 December 2019 в 02:19

Я не могу следовать вашему коду, но обычно использую команду

cd $DIR_WITH_ONE_FILE
if (cd $DIR_WITH_OTHER_FILE ; md5sum $FILE) | md5sum -c --status
then
    echo "same"
else
    echo "different"
fi

. Это зависит от двух файлов, имеющих одинаковое имя, но находящихся в разных каталогах. YMMV.

0
ответ дан 3 December 2019 в 02:19

Вы также можете использовать cmp . На странице руководства - cmp - сравните два файла побайтно . Он завершается с 0, если файлы совпадают.

if cmp -s "$oldfile" "$newfile" ; then
   echo "Nothing changed"
else
   echo "Something changed"
fi
13
ответ дан 3 December 2019 в 02:19

Будьте проще. 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
7
ответ дан 3 December 2019 в 02:19

Попробуйте "diff -s"

$ 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
0
ответ дан 3 December 2019 в 02:19

A> Используйте diff -q файл1 файл2. Этот статус возвращает 0, если они одинаковы, и 1, если разные. Таким образом, вы можете использовать это в своем скрипте и проверить $? вернуть статус, например:

diff -s file1 file2 ; 
if [[ $? ==0 ]] ; then
  echo 'files are the same'
else
  echo 'files are different'
fi

B. У Diff есть такие параметры, как сглаживание разницы в пробелах (-w). Таким образом, вы можете использовать это в сочетании. (Так что в этом отношении diff более гибкий, чем cmp)

0
ответ дан 9 December 2020 в 22:15

Теги

Похожие вопросы