Проблемы с openssl и получением правильных значений

Кажется, у меня проблема с получением правильного значения команды openssl, когда она хэшируется. Вот что у меня есть для кода.

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

Здесь вводится второй столбец в текстовом файле, который является "${line[1]}" в коде.

"1376051635"

Вот как я запускаю команду:

./orange.sh < "C:\Documents and Settings\562359\Desktop\Analytics\persons\persons.txt"

Вывод на экран это:

"524786870","1376051635",2483a818fac3e5214697f1ed76d92e2f54d4a277

третий столбец - это хэшированное значение второго столбца, но оно неверно. Когда я запускаю эту команду

echo -n "1376051635" | openssl dgst -sha1

Мой вывод:

(stdin)= f8d822c6b46a2eb4e35bb4d76b8ce2e336d541e8

что является правильным значением хеша. Почему это не работает, как это должно работать? Кажется, что код верен, но значение хеша выводится совершенно иначе, чем должно быть. Любая помощь по этому вопросу будет принята с благодарностью.

1 ответ

Решение

Вы включаете двойные кавычки, поэтому вы получаете другое значение.

Вы можете попробовать этот скрипт:

#!/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

Примечание. Если вы планируете заменить предыдущее значение хеша, используйте эту строку:

        echo "${line[*]:0:2},${hash_value}"
Другие вопросы по тегам