[OK][ShellScript Linux] Comparaison de string ... - Problème avec une comparaison de chaine

Salut à tous :oui:

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

et là par exemple, j’obtiens ça :

help :cry:

deux problèmes :

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

Quelle est son utilite ? caractere de fin de chaine ?

super benj, c’était ça :jap:

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 :smiley:
si tu as un bon site pour m’expliquer tout ça :jap:

encore merci :super:

mes deux bookmarks pour le bash

http://www.tldp.org/LDP/Bash-Beginners-Gui…ners-Guide.html
http://www.tldp.org/LDP/abs/html/abs-guide.html

en fait, md5sum prend comme argument un nom de fichier et retourne :
<hash> <nom du fichier>

et comme la le nom du fichier n’est pas précisé (le contenu est pipé) il affiche un -

edit : un exemple vaut mieux que des explications :

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.

Ok, je comprends mieux now :slight_smile:

:jap:

ajoutés dans mes bookmarks :super:
thank’s :jap: