Проблемы с 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}"