Utilizando banco de dados em Shell Script

Alan Victor Segunda, 10 de Agosto de 2015


Nesse post vou mostrar como utilizar banco de dados 'mysql' em shell script. Para isso criei duas funções, "mysql_query" e "mysql_num_rows".

Exemplo do banco:

CREATE DATABASE agenda;
CREATE TABLE contatos (
id INT(5) AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(20) NOT NULL,
telefone VARCHAR(9) NOT NULL,
email VARCHAR(30)
);

 

Arquivo "MyShellSql.sh"

mysql_query() {
        local user='teste'
        local pass='teste'
        local bd='teste'
        local arg1="$1"
        local logdir="/var/log/MyShellSql"
        local logfile="$logdir/mysql_query.log"
        [ -d $logdir ] || mkdir $logdir
        [ -e $logdir ] || touch $logfile
        local conexao="mysql -u $user -p$pass --skip-column-names -e"

        [[ -z $arg1 ]] && { echo 'Funcao com argumento vazio!'; return 1 ; } 

        saida=$($conexao "use $bd ; $arg1" 2>> $logfile) || return 1
        echo "$saida" | sed 's/t/;/g;/^$/d'
}


mysql_num_rows() {
	local arg1=$1
	echo "$arg1" | sed '/^$/d' | wc -l
}

 

Escrevi um script com funções básicas do mysql de forma simples, apenas um exemplo de uso das funções "mysql_query" e "mysql_num_rows".

Arquivo "programa.sh"

#!/bin/bash
# Alan Victor
# Exemplo de uso de shell script + mysql

clear
source MyShellSql.sh

echo "
Agenda Teste!
1 - Consultar
2 - Adicionar
3 - Remover
4 - Alterar
5 - Listar Todos
"
read -p "Escolha uma opcao: " opt
case $opt in
	1)
		clear
		echo "Consultar"
		read -p "Digite o nome do contato: " nome
		saida=$(mysql_query "SELECT * FROM contatos WHERE nome = '$nome'")
		if [[ $(mysql_num_rows "$saida") -gt "0" ]] ; then
			nome=$(echo "$saida" | cut -d ';' -f2)
			telefone=$(echo "$saida" | cut -d ';' -f3)
			email=$(echo "$saida" | cut -d ';' -f4)
			echo -e "nNome: $nome"
			echo -e "Email: $email"
			echo -e "Telefone: $telefonen"
		else
			echo -e "nSem cadastro de $nomen"
		fi
	;;

	2)
		clear
		echo "Adicionar"
		read -p "Digite o nome do contato: " nome
		read -p "Digite o telefone do contato: " telefone
		read -p "Digite o email do contato: " email
		mysql_query "INSERT INTO contatos VALUES ('', '$nome', '$telefone', '$email')"
		[ $? == '0' ] && echo "Contato Cadastrado!" || echo "Erro ao cadastrar"
	;;

	3)
		clear
		echo "Remover"
		read -p "Digite o email do contato: " email
		saida=$(mysql_query "SELECT * FROM contatos WHERE email = '$email'")
		if [[ $(mysql_num_rows "$saida") -gt "0" ]] ; then
			mysql_query "DELETE FROM contatos WHERE email = '$email'"
			[ $? == '0' ] && echo "Contato Removido!"
		fi
	;;

	4)
		clear
		echo "Alterar"
		read -p "Digite o email do contato para alterar: " email
		echo "Escolha uma opcao para alterar:"
		echo "1 - Nome"
		echo "2 - Email"
		echo "3 - Telefone"
		read -p "Opcao? " opt
		case $opt in
			1)
				read -p "Digite o novo Nome: " nome
				mysql_query "UPDATE contatos SET nome = '$nome' WHERE email = '$email'"
				[ $? == 0 ] && { echo "$nome alterado com sucesso" ; } || { echo "Erro ao alterar $nome" ; }
			;;

			2)
				read -p "Digite o novo Email: " email1
				mysql_query "UPDATE contatos SET email = '$email1' WHERE email = '$email'"
				[ $? == 0 ] && { echo "$email alterado com sucesso" ; } || { echo "Erro ao alterar $email" ; }
			;;

			3)
				read -p "Digite o novo Telefone: " telefone
				mysql_query "UPDATE contatos SET telefone = '$telefone' WHERE email = '$email'"
				[ $? == 0 ] && { echo "$telefone alterado com sucesso" ; } || { echo "Erro ao alterar $telefone" ; }
			;;

			*)
				echo "Opcao desconhecida!"
			;;
		esac

	;;

	5)
		clear
		saida=$(mysql_query "SELECT * FROM contatos")
		echo "================================="
		for i in $saida ; do
			nome=$(echo "$i" | cut -d ';' -f2)
			telefone=$(echo "$i" | cut -d ';' -f3)
			email=$(echo "$i" | cut -d ';' -f4)
			echo -e "Nome: $nome"
			echo -e "Email: $email"
			echo -e "Telefone: $telefone"
			echo "================================="
		done
	;;

	*)
		echo "Opcao desconhecida!"
		exit 1
	;;
esac

Espero que a informação sobre o assunto tenha ajudado! :)

Até a próxima!