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, já 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.
A ideia não é de forma nenhuma deixar de usar linguagens como PERL e PHP, já 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
Postar um comentário