Je semble avoir un problème avec l’obtention de la valeur correcte de la commande openssl lorsqu’elle est hachée. Voici ce que j’ai pour le code.
IFS="," while read -ra line; do if [ "${line[1]}" != "" ]; then echo -n "${line[*]},"; echo -n "${line[1]}" | openssl dgst -sha1 | sed 's/^.* //' ; else if [ "${line[1]}" == "" ]; then echo "${line[*]}, Hash Value: None"; fi fi done
Voici l’entrée de la deuxième colonne du fichier texte, qui est “$ {ligne [1]}” dans le code.
"1376051635"
Voici comment j’exécute la commande:
./orange.sh < "C:\Documents and Settings\562359\Desktop\Analytics\persons\persons.txt"
La sortie à l’écran est la suivante:
"524786870","1376051635",2483a818fac3e5214697f1ed76d92e2f54d4a277
la troisième colonne est la valeur hachée de la deuxième colonne mais elle n’est pas correcte. Quand je lance cette commande
echo -n "1376051635" | openssl dgst -sha1
Ma sortie est la suivante:
(stdin)= f8d822c6b46a2eb4e35bb4d76b8ce2e336d541e8
qui est la valeur de hachage correcte. Pourquoi cela ne fonctionne-t-il pas? Il semble que le code soit correct mais la valeur de hachage est sortie complètement différente de ce qu’elle devrait être. Toute aide sur cette question serait grandement appréciée.
Vous incluez les guillemets doubles qui expliquent pourquoi vous obtenez une valeur différente.
Vous pouvez essayer ce script:
#!/bin/bash IFS="," while read -ra line; do if [[ -n ${line[1]} ]]; then second_value=${line[1]#\"} second_value=${second_value%\"} hash_value=$(echo -n "$second_value" | openssl dgst -sha1 | sed 's/^.* //') echo "${line[*]},${hash_value}" ## Or should ${hashvalue} be surrounded by quotes?: \"${hash_value}\" else echo "${line[*]}, Hash Value: None" fi done
Remarque: Si vous prévoyez de remplacer la valeur de hachage précédente, utilisez plutôt cette ligne:
echo "${line[*]:0:2},${hash_value}"