У меня есть маленький файл сценария под названием 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 file:
login:
Вы неправильно выполняете 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 s read и here-string <<< (см. word splitting для получения дополнительной информации об этом операторе):
$ 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.
Вы неправильно выполняете 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 s read и here-string <<< (см. word splitting для получения дополнительной информации об этом операторе):
$ 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.
Вы неправильно выполняете 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 s read и here-string <<< (см. word splitting для получения дополнительной информации об этом операторе):
$ 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.
Следующий сценарий также работает для меня.
#!/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
Следующий сценарий также работает для меня.
#!/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
Следующий сценарий также работает для меня.
#!/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