Você está fazendo a designação var
de maneira errada.
var=$passvar|md5sum
Você deveria enviar "$passvar"
para md5sum
. Ele não passará pelo pipe |
sozinho, então você precisa usar echo
ou printf
. Isso resultará em coisas para stdout
stream. Você pode capturar isso em variável com a substituição de comando $(...)
. Em outras palavras, você deveria estar fazendo:
var=$( echo "$passvar" | md5sum )
Além disso, lembre-se de citar as variáveis para preservar a integridade dos dados armazenados nelas e evitar que a divisão de palavras .
Outras questões:
$ read -sp 'Your password:' passvar
Your password:$ var=$( echo "$passvar" | md5sum )
$ echo "$var"
2b00042f7481c7b056c4b410d28f33cf -
Observe duas coisas aqui: não há nova linha após "Sua senha", então você pode querer adicionar echo
após esse comando. Em segundo lugar, observe que md5sum
produz o nome do arquivo após a soma de verificação md5 calculada, que nesse caso é -
ou stdin
stream. Você pode querer considerar livrar-se dessa parte por meio de qualquer utilitário de processamento de texto que permita cortar palavras, como awk
:
var=$( echo "$passvar" | md5sum | awk '{print }')
Como alternativa, você pode usar apenas bash
da leitura e da string <<<
(veja esta para mais informações sobre esse operador):
$ read var trash <<< $( echo "$passvar" | md5sum )
$ echo "$var"
2b00042f7481c7b056c4b410d28f33cf
Por último, mas não menos importante, sua linha #!
está faltando /
antes de bin
- deve ser #!/bin/bash
.
O script completo deve ser assim:
#!/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
Observe que eu comentei o redirecionamento para o arquivo, apenas para ver a saída no terminal para fins de teste. Veja como funciona:
$ ./testing.sh
Your login: johndoe
Your password:
johndoe:912ec803b2ce49e4a541068d495ab570$
Para referência futura, você pode adicionar set -x
após #!/bin/bash
(já que definiu corretamente a linha #!
, é claro) para solucionar o script e ver quais comandos realmente são executados e se podem ocorrer erros. Ou use a ferramenta on-line shellcheck .