Introdução
Neste artigo, quero compartilhar uma aplicação que estou aprendendo a desenvolver: um sistema de cadastro e login em shell script que se conecta a um banco de dados MySQL. A escolha de usar o terminal em vez de um navegador se deve à simplicidade de focar na funcionalidade, sem se distrair com aspectos de estilo.
1. Preparação do Ambiente e Modelagem do Banco de Dados
Antes de iniciar, é necessário configurar um serviço local de banco de dados, como o Wamp, Lampp ou XAMPP Server, e criar o modelo do banco de dados para armazenar informações do usuário. No meu caso, optei pelo XAMPP Server, que combina Apache, PHP e MySQL. Você pode instalar e configurar o XAMPP seguindo o tutorial no blog do Edivaldo Brito. Depois da instalação, utilize os comandos a seguir no terminal (específicos para distribuições baseadas em Debian):
sudo /opt/lampp/xampp start
Use este comando quando quiser iniciar o xampp
sudo /opt/lampp/xampp status
para ver o status da aplicação
Para restartar a aplicação
sudo /opt/lampp/xampp restartsudo /opt/lampp/xampp stop
Para parar a execução do servidor
Agora que você conhece os comandos básicos do mysql, vamos ao modelo do banco de dados.
Em relação à modelagem, nossa tabela terá quatro colunas: ID do usuário (com incremento automático), nome de usuário (username), e-mail e senha_hash (para armazenar senhas de forma segura). O comando para criar essa tabela é:
O comando para a criação da tabela no mysql será:
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
senha_hash VARCHAR(128) NOT NULL
);
2. Criação do formulário de cadastro em shell script
Agora é hora de abrirmos o editor de texto e digitarmos o nosso programa. Para isso, você pode usar o editor que quiser, a minha preferência é o editor micro, que é baseado em nano e roda dentro do terminal.
Vamos chamar nosso código de login ( não precisa colocar a extensão sh)
Esse trecho do código prepara as variáveis que enviarão os dados para o mysql.
#!/bin/bash
# Sistema de login em banco de dados em shell script
#Cadastro de usuário
echo " Cadastro "
read -p "Username: " nome
read -p "email: " email
echo -n "Senha: "
read -s senha
senhaCriptografada=$(echo -n "$senha" | openssl dgst -sha256 | awk '{print $2}')
A última linha de comando usa o utilitário OpenSSL para realizar uma operação de hash sobre os dados de entrada. O comando dgst
é usado para calcular o hash de um arquivo. -sha256
especifica o algoritmo de hash que será usado, que neste caso é o SHA-256.
Nessa parte do código, eu crio uma conexão com o servidor e com o banco de dados fornecendo as informações ao mysql e, em seguida armazeno as variáveis no banco de dados. Quando a gente faz isso pela primeira vez, é muito fascinante. Dá para imaginar a quantidade de aplicações que utiliza isso!?
echo "Conectando-se ao banco de dados"
sleep 1
clear
# Cria uma conexão com o banco de dados
# Configurações de conexão
DB_HOST="localhost"
DB_USER="root"
DB_NAME="usuarios"
/opt/lampp/bin/mysql -u $DB_USER -D $DB_NAME -e "insert into usuario (nome, email, senha) values ('$nome', '$email', '$senhaCriptografada');"
chmod +x login
Em seguida, execute
./login
Se tudo deu certo para você e não apareceu nenhuma mensagem de erro no terminal, você poderá acessar o seu banco de dados através de localhost/phpmyadmin e ver que os seus usuários estão sendo cadastrados com sucesso.
Conclusão
Com este artigo, você aprendeu como cadastrar variáveis no banco de dados. Nossa criação do sistema de cadastro e login em shell script já está começando a ganhar forma! Nos próximos posts, vou demonstrar como criei uma tela de login que permite que os usuários digitem suas credenciais para autenticação em uma sessão restrita, tudo isso diretamente no terminal.
Para acompanhar mais posts da categoria diário de bordo, onde eu conto minhas experiências de aprendizagem como desenvolvedor autodidata e compartilho conhecimento, basta clicar neste link aqui.
Pingback: Algoritmos de Divisibilidade em Shell Script: Exemplos e Explicações - Diário de bordo #4 - Télico Oliveira