MySQL bash script
Publicado por Pedro Robson Leão 20/04/2009 (última atualização em 13/04/2015)
[ Hits: 13.058 ]
Download mysql.tar.bz2 (versão 2)
O script a seguir é um exemplo de estudo mostrando a possibilidade do que pode e não ser feito com shell script.
Criei uma biblioteca bash script para ser usada como interface MySQL de forma fácil e intuitiva. Espero que seja útil e estou a disposição para duvidas.
Pedro Robson Leão
Versão 2 - Enviado por Pedro Robson Leão em 09/04/2015
Changelog: Atualização da versão.
Não sei o que ocorreu mais a versão anterior estava errada.
Warning: Using a password on the command line interface can be insecure.
A mensagem acima foi incluída nas versões mais novas do MySQL e quebra o script.
::::::::::::::
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
#IFS=$OLDFS;
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 ' ' '£' );
#done < <( mysql -u"${_DB_USER}" -p"${_DB_PWD}" -h"${_DB_HOST}" "${_DB}" -e "${1}" 2>&1 | sed s/'\t'/\"'\t'\"/g | sed s/$/\"/g | sed s/^/\"/g );
_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
}
::::::::::::::
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
E-mails através de um servidor remoto
Impedir duas ou mais conexões por usuário
NetScan - o seu scanner de rede!
Ferramenta para o CBQ - parte 1
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Opções secretas em tema do Cinnamon
Como mapear unidade de rede no Linux
Como quebrar senha usando john the ripper
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (1)
Alguém já testou o novo COSMIC Desktop? O que achou? (4)
Não consigo instalar distro antiga no virtualbox nem direto no hd (29)
queria saber como posso alterar a frequencia do meu ryzen 2300u pro (3)









