Конкатенация строки md5

У меня есть небольшой файл сценария под названием testing.sh, где я прошу пользователя ввести свой логин и пароль. Затем пароль шифруется командой md5sum, и результат сохраняется в файле results.txt в форме login:md5password. Однако, когда я просматриваю файл results.txt, я получаю только login:, зашифрованный пароль не соединяется. Что я делаю не так?

Вот файл testing.sh:

#!bin/bash
read -p 'Your login: ' uservar
read -sp 'Your password: ' passvar

var=$passvar|md5sum
echo $uservar:$var > ~/Desktop/results.txt

results.txt Файл:

login:
1
задан 30 November 2017 в 10:43

2 ответа

Вы делаете var задание неправильно.

var=$passvar|md5sum

Вы должны отправить "$passvar" в md5sum. Он не пройдет через трубу | сам по себе, поэтому вам нужно либо использовать echo, либо printf. Это выведет вещи в поток stdout. Вы можете записать это в переменную с помощью подстановки команд $(...). Другими словами, вы должны делать:

var=$( echo "$passvar" | md5sum )

Также, пожалуйста, не забудьте заключить в кавычки переменные, чтобы сохранить целостность данных, хранящихся в них, и предотвратить разбиение слов .


Другие проблемы:

$ read -sp 'Your password:' passvar
Your password:$ var=$( echo "$passvar" | md5sum )
$ echo "$var"
2b00042f7481c7b056c4b410d28f33cf  -

Здесь обратите внимание на две вещи: после «Вашего пароля» нет новой строки, поэтому вы можете добавить echo после этой команды. Во-вторых, обратите внимание, что md5sum выводит имя файла после вычисленной контрольной суммы md5, которая в этом случае является потоком - или stdin. Возможно, вы захотите избавиться от этой части с помощью любой утилиты обработки текста, которая позволит вам вырезать слова, например, awk:

var=$( echo "$passvar" | md5sum | awk '{print $1}')

. В качестве альтернативы, вы можете просто использовать bash читать и здесь-строку <<< (см. это для получения дополнительной информации об этом операторе):

$ read var trash <<< $( echo "$passvar" | md5sum )
$ echo "$var"
2b00042f7481c7b056c4b410d28f33cf

И последнее, но не менее важное: ваша строка #! отсутствует / ранее bin - должно быть #!/bin/bash.

Полный сценарий должен быть таким:

#!/bin/bash
read -p 'Your login: ' uservar
read -sp 'Your password: ' passvar
printf "\n"
read var trash <<< "$(printf "%s" "$passvar" | md5sum)"
printf "%s:%s" "$uservar" "$var" #> ~/results.txt

Обратите внимание, что я закомментировал перенаправление в файл, просто чтобы посмотреть вывод на терминале для целей тестирования. Вот как это работает:

$ ./testing.sh 
Your login: johndoe
Your password: 
johndoe:912ec803b2ce49e4a541068d495ab570$ 

Для дальнейшего использования вы можете добавить set -x после #!/bin/bash (если, конечно, вы правильно определили строку #!), чтобы устранить неполадки Сценарий и посмотреть, какие команды на самом деле выполняются и могут возникнуть ошибки. Или просто используйте shellcheck онлайн-инструмент.

3
ответ дан 30 November 2017 в 10:43

Следующий скрипт также работает для меня.

#!/bin/bash
echo -n 'Your login:'
read uservar

echo -n 'Your password:'
read -s passvar

printf "\n"

encrpt=$(echo "$passvar" | md5sum | awk '{print $1;}')

echo "$uservar":"$encrpt" > /home/bond/result.txt

Выход

bond@hp-pc:~$ ./test.sh 
Your login:bond
Your password:
bond@hp-pc:~$ cat result.txt 
bond:22c291f0335f869c154d8081854d9119
1
ответ дан 30 November 2017 в 10:43

Другие вопросы по тегам:

Похожие вопросы: