Für alle, die hierher kommen und eine Datei mit einer bestimmten md5-Summe vergleichen möchten, können Sie diese Funktion ausprobieren:
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
}
Und dann verwenden Sie es einfach wie:
$ checkmd5 <SOME_MD5_SUM> filepath/file.abc
In dieser Zeile if [ $file1 != $file2 ]
, vergleichen Sie nicht den Inhalt zweier Dateien, sondern nur die Dateinamen. Also if [ "md5sum.txt" != "GeoLite2-City.md5" ]
wird immer wahr sein.
Das sollte funktionieren:
if [ "`awk '{print $1;}' $file1`" != "`cat $file2`" ]; then
...do your logic here...
fi
Also ... das Problem, das Sie sehen, scheint das Format von md5sum.txt
zu sein Datei, die Sie erstellen, stimmt nicht mit dem Format von .md5
überein herunterzuladende Datei, mit der Sie den berechneten Wert vergleichen müssen.
Das Folgende würde meiner Version des Skripts näher kommen. (Erklärung unten.)
#!/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
Die Hauptunterschiede hier sind..
rm -f GeoLightCity.dat
statt-rf
. Greifen wir nicht weiter als nötig.md5sum
nimmt die Standardeingabe, anstatt die Datei nach Namen zu verarbeiten. Der Effekt ist, dass die Ausgabe keinen Dateinamen enthält. Leider aufgrund von Beschränkungen für Linuxmd5sum
Befehl, stimmt dies immer noch nicht mit der .md5-Datei überein, die Sie von Maxmind herunterladen, also:cut
wird verwendet, um die resultierende Ausgabe zu modifizieren, wobei nur der berechnete md5 zurückbleibt.- mit
cmp
anstelle von Subshells, pro Kommentar zu Ihrer Frage.
Der zweite und dritte Punkt sind vielleicht die wichtigsten für Sie.
Eine weitere Option zum Erstellen Ihrer md5sum.txt-Datei wäre, dies direkt während des Downloads zu tun. Zum Beispiel:
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
Dies verwendet den tee
Befehl, um die Datei in ihren Speicherort und eine weitere Pipe aufzuteilen, die md5sum durchläuft, um Ihre .txt-Datei zu generieren.
Könnte Ihnen eine Minute ersparen, die sonst von der anschließend ausgeführten md5sum aufgezehrt würde. Und es wird SMP besser nutzen. :)