Como posso adicionar mais nomes de usuário e senhas aqui?

Como posso adicionar mais nomes de usuário e senhas aqui?

O conteúdo dentro do arquivo bash será ofuscado

echo "Enter The Login Name:"
read username
echo "Enter The Password:"
read password

if [[ $username == "user"  && $password == "password" ]]
then
  echo -e "You're Logged In\n"
elif [ $username != "user" ] 
then
  echo -e "Invalid User Name\n"
else
  echo -e "Invalid Password\n"
fi

Responder1

Um dos comentários diz:

Crie um arquivo de texto com nomes de usuário e senhas. E via loop verifique-os no arquivo.

É uma ideia decente. O código pode ser assim:

#!/bin/bash

function validate {
    local user pass
    while IFS=' ' read -r user pass; do
       [ "$1" = "$user" ] && [ "$2" = "$pass" ] && return 0
    done </the/file
    return 1
}

read -rp "Login: " u
read -rsp "Password: " p

echo
if validate "$u" "$p"; then
   echo "Access granted."
else
   echo "Access denied."
fi

Exemplo /the/file:

kamil foo
joe bar
anotherUser pa$$word
bill password that contains spaces

Tudo após o primeiro espaço de uma linha é a senha.

Notas:

  • Isso poderia ser feito sem uma função. A função é bastante útil aqui devido à sua capacidade de return 0(sucesso) a partir do meio do loop sem lógica adicional.
  • Uma linha vazia significa login vazio e senha vazia. Observe que em *nix cada linha em um arquivo de texto deve terminar com um caractere de nova linha, portanto, um caractere de nova linha no final do arquivo não significa que haja uma linha vazia depois dele. Ainda assim, é muito fácil colocar uma linha verdadeiramente vazia no final, então preste atenção. Alternativamente, você pode adicionar alguma lógica à função para que o login vazio nunca seja aceito.
  • Para executar esse código sem erros, você precisa ter acesso de leitura ao /the/file. Mas se você fizer isso, basta ler o arquivo e conhecer todos os segredos. Não vou consertar isso aqui. Armazenar senhas de maneira segura está além do escopo da questão.
  • Se você preferir incorporar senhas no próprio arquivo shell, useaqui documento. Em vez de done </the/filefazer como:

       done <<'EOF'
    kamil foo
    joe bar
    anotherUser pa$$word
    bill password that contains spaces
    EOF
    

    Observe que citar o primeiro EOFé importante. Sem ele $$seria ampliado.

informação relacionada