Pular para o conteúdo principal

MySQL Bash Interface

Neste exemplo, vamos apresentar uma interface simples de uso do MySQL dentro de um Bash Script.
A ideia não é de forma nenhuma deixar de usar linguagens como PERL e PHP, consagradas com seu suporte ao MySQL, mais sim demonstrar um exemplo legal do que pode ser feito com Bash Script.
Vale lembrar que neste exemplo não estava avaliando performance mais sim funcionalidade.
A Primeira parte mostra o exemplo de uso propriamente escrito.
No segundo exemplo vocês tem a disposição o código da biblioteca criada para uso no primeiro exemplo.
Neste exemplo é possível ver que mesmo em Bash script da para escrever programas organizados e até
criar bibliotecas para utilizar-mos em nosso dia a dia.

::::::::::::::
mysql_sample.sh
::::::::::::::
#!/bin/bash
source include/mysql.sh

#sample
mysql_connect root Germany information_schema;

mysql_execute
"SELECT * FROM TABLES";

mysql_haserror &&
{
echo "$( mysql_geterrno ): $( mysql_geterror )";
exit;
}

mysql_getfirst;

echo "$(mysql_line) : $( mysql_getfield 0 )|$( mysql_getfield 1 )|$( mysql_getfield 2)|$( mysql_getfield 3)|$( mysql_getfield 4)|$( mysql_getfield 5)";

while mysql_hasnext ; do
mysql_getnext
;
echo "$(mysql_line) : $( mysql_getfield TABLE_SCHEMA )|$( mysql_getfield ENGINE )|$( mysql_getfield TABLE_NAME )";
done

::::::::::::::
include/mysql.sh
::::::::::::::
#!/bin/bash

# MySQL shell library
# Pedro Robson Leao - 2009/04/19
# pedro.leao@gmail.com

_DB_ERROR="";
_DB_ERROR_CODE=0;

_DB_RS_NEXT=1;
_DB_RS_COUNT=0;

function mysql_connect() {
local
user=${1:-"root"};
local
passwd=${2};
local
db=${3:-"mysql"};
local
host=${4:-"localhost"};

_DB_USER="${user}";
_DB_PWD="${passwd}";
_DB_HOST="${host}";
_DB="${db}";
}

function mysql_error() {
#ERROR 1046 (3D000) at line 1: No database selected
local
error=$( echo ${1} | tr '£' ' ' );

if echo "${error}" | egrep -q "^ERROR [0-9]+ \([A-Za-z0-9]+\)" ; then
_DB_ERROR_CODE=$( echo ${error} | cut -d " " -f 2 );

_DB_ERROR=$( echo ${error} | cut -d : -f 2- );
else
false
;
fi
}

function mysql_haserror() {
[ ${_DB_ERROR_CODE} -ne 0 ] && true || false;
}

function mysql_geterror() {
echo "${_DB_ERROR}";
}

function mysql_geterrno() {
echo "${_DB_ERROR_CODE}";
}

function mysql_execute() {
local line
;
local
ct=0;

while
read line ; do
if [ ${ct} -eq 0 ] ; then
if mysql_error "${line}" ; then
return;
else
_DB_COLUNS_NAME=( ${line} );
fi
else
_DB_RS
[${ct}]="${line}";
fi
ct=$((ct+1));
done < <( mysql -u"${_DB_USER}" -p"${_DB_PWD}" -h"${_DB_HOST}" "${_DB}" -e "${1}" 2>&1 | tr ' ' '£' );

_DB_RS
[${ct}]=;
_DB_RS_COUNT=${ct};
}

function mysql_count() {
echo "${_DB_RS_COUNT}";
}

function mysql_getfirst() {
_DB_RS_NEXT=1;

echo $( mysql_getnext );
}

function mysql_getnext() {
_DB_RS_NEXT=$((_DB_RS_NEXT+1));
}

function mysql_hasnext() {
[ ${_DB_RS_COUNT} -le $((_DB_RS_NEXT+1)) ] && return 1 || return 0;
}

function mysql_line() {
echo ${_DB_RS_NEXT};
}

function mysql_getfield() {
local
size=${#_DB_COLUNS_NAME[@]};

local
VCT=( ${_DB_RS[${_DB_RS_NEXT}]} );

if echo ${1} | egrep -q "^[0-9]+$" ; then
# pesquisa por numero do campo

[ ${1} -le ${size} ] && {
echo ${VCT[${1}]} | tr '£' ' ';
}
else
# pesquisa por nome do campo

local i
;

for ((i=0;i<size;i++)) ; do
if [ "${1}" == "${_DB_COLUNS_NAME[$i]}" ] ; then
break;
fi
done

echo ${VCT[$i]} | tr '£' ' ';
fi
}

Comentários

Postagens mais visitadas deste blog

+ 1 exemplo de recordSet em bash script

Bem pessoas, Sei que tem mais atividade no Rio de Janeiro ultimamente que neste BLOG. Sabe como eh ... Família, Trabalho, Dia a Dia. Bem deixa de Bla, Bla, Bla e choramingas e la vai. Mais um modo de fazer um recordSet para trabalhar com o MySQL ou outro banco a sua escolha. Lembre-se: Estes scripts são somente prova de conceito Servem para vocês verem todo o potencial de um programa bash script. Boa sorte

Porque um blog ....

A Finalidade deste blog é divulgar/escrever sobre alguns assuntos de meu interesse e compartilhar com vocês um pouco do meu conhecimento e também aprender muito com vocês. Vou postar aqui scripts, programas e conto com a colaboracao de vocês para elogios, criticas, etc. Bem é isto ai... :-D