J’ai à faire un ptit script tout simple tout basique :
1/ calculer le hash md5 d’un argument passé au script
2/ vérifier si le fichier de stockage du hash existe
2a/ si oui, on vérifie que le hash stocké est identique ou non
2b/ si non, on créer le fichier et on stocke le hash dedans
3/ si le hash était différent ou le fichier non existant, on execute la commande passé en argument
rien de compliqué, et tout fonctionne presque, sauf le 2a) où la comparaison est TOUJOURS fausse (même si les deux chaines sont visuellement identique :paf: ) …
donc si quelqu’un à une idée sur comment faire, car là je sêche :riva: …
ci dessous le script en entier (le nom du fichier de stockage est ‘hash’) :
#!/bin/bash
str_md5=`echo $1 | md5sum -t`
if [ -f hash ]; then
str_old_hash=`cat hash`
echo 'Hash fichier: '$str_old_hash
echo 'Hash calcule: '$str_md5
if [ "$str_old_hash" = "$str_md5" ]; then
echo 'Hash egaux'
else
echo 'Hash different'
fi
else
# file doesn't exist, we create it
echo $str_md5 > hash
fi
1- tu fais le hash sur le nom du fichier, pas son contenu (c’est voulu ?)
2- il ne faut pas enlever le " -" a la fin du hash pour que cela fonctionne bien
voici donc une version fonctionnant et hashant le contenu du fichier :
#!/bin/bash
str_md5=`cat $1 | md5sum -t | awk '{print $1}'`
if [ -f hash ]; then
str_old_hash=`cat hash`
echo 'Hash fichier: '$str_old_hash
echo 'Hash calcule: '$str_md5
if [ "$str_old_hash" = "$str_md5" ]; then
echo 'Hash egaux'
else
echo 'Hash different'
fi
else
# file doesn't exist, we create it
echo $str_md5 > hash
fi
je me doutais que ce - à la fin foutait sa merde et je cherchais comment le virer, mais j’ai pas encore la syntaxe d’awk dans le sang
si tu as un bon site pour m’expliquer tout ça :jap:
et puis ta façon de hasher n’est probablement pas la meilleure si tu ne hashes pas des fichiers uniquement plain text (spécifié avec -t). tu devrais probablement plutot utiliser -b à la place.