Bagi siapa pun yang datang ke sini ingin membandingkan file dengan jumlah md5 tertentu, Anda dapat mencoba fungsi ini:
function checkmd5() {
md5_to_test=$1
md5_from_file=$(md5sum "$2" | cut -d " " -f1)
md5_results="Input: $md5_to_test\nFile: $md5_from_file"
if [[ $md5_to_test == $md5_from_file ]]
then
echo -e "\n\e[92mSUCCESS\e[39m\n$md5_results"
else
echo -e "\n\e[91mFAILURE\e[39m\n$md5_results"
fi
}
Dan kemudian gunakan saja seperti:
$ checkmd5 <SOME_MD5_SUM> filepath/file.abc
Di baris itu if [ $file1 != $file2 ]
, Anda tidak membandingkan konten dari dua file, tetapi hanya nama file. Jadi if [ "md5sum.txt" != "GeoLite2-City.md5" ]
akan selalu benar.
Itu seharusnya berhasil:
if [ "`awk '{print $1;}' $file1`" != "`cat $file2`" ]; then
...do your logic here...
fi
Jadi .. masalah yang Anda lihat tampaknya adalah format md5sum.txt
file yang Anda buat tidak cocok dengan format .md5
file yang Anda unduh, yang perlu Anda periksa nilai yang Anda hitung.
Berikut ini akan lebih dekat dengan versi skrip saya. (Penjelasan di bawah.)
#!/bin/bash
if ! cd /home/example/public_html/exampledomain.com/billing/system/; then
echo "Can't find work directory" >&2
exit 1
fi
rm -f GeoLiteCity.dat
curl -L https://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz | gunzip > GeoLiteCity.dat
curl -L https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz | gunzip > GeoLite2-City.dat
curl -O https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.md5
md5sum < GeoLite2-City.dat | cut -d\ -f1 > md5sum.txt
file1="md5sum.txt"
file2="GeoLite2-City.md5"
if ! cmp --silent "$file1" "$file2"; then
mail -s "Results of GeoLite Updates" [email protected] <<< "md5sum for GeoLite2-City failed. Please check the md5sum. File may possibly be corrupted."
fi
Perbedaan utama di sini adalah..
rm -f GeoLightCity.dat
bukannya-rf
. Jangan menjangkau lebih jauh dari yang kita butuhkan.md5sum
mengambil input standar daripada memproses file dengan nama. Efeknya adalah output tidak menyertakan nama file. Sayangnya karena keterbatasanmd5sum
Linux perintah, ini masih tidak cocok dengan file .md5 yang Anda unduh dari Maxmind, jadi:cut
digunakan untuk memodifikasi keluaran yang dihasilkan, hanya menyisakan md5 yang dihitung.- menggunakan
cmp
alih-alih subkulit, per komentar pada pertanyaan Anda.
Poin kedua dan ketiga mungkin yang paling penting bagi Anda.
Opsi lain untuk membuat file md5sum.txt Anda adalah dengan melakukannya saat Anda mengunduh. Misalnya:
curl -L https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz \
| gunzip | tee -a GeoLite2-City.dat | cut -d\ -f1 | md5sum > md5sum.txt
Ini menggunakan tee
perintah untuk membagi file menjadi lokasi "simpan" dan pipa lain, yang melewati md5sum untuk menghasilkan file .txt Anda.
Mungkin menghemat satu menit yang jika tidak akan dimakan oleh md5sum yang berjalan sesudahnya. Dan itu akan memanfaatkan SMP dengan lebih baik. :)