GNU/Linux >> Belajar Linux >  >> Linux

Bandingkan jumlah md5 dalam skrip bash

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 keterbatasan md5sum 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. :)


Linux
  1. Bash Script:Periksa Apakah File Adalah File Teks?

  2. Menjalankan File Skrip Melalui Ssh Melalui Sudo?

  3. Bagaimana Cara Memeriksa Substring Di Shell Script Bash?

  1. Arahkan ulang input standar secara dinamis dalam skrip bash

  2. Skrip Bash:juru bahasa yang buruk

  3. Cara memasukkan file dalam skrip bash shell

  1. Bisakah Skrip Bash Dihubungkan ke File?

  2. Cara grep untuk unicode � dalam skrip bash

  3. Tentukan apakah sistem file atau partisi dipasang RO atau RW melalui Bash Script?