MySQL bash script

Publicado por Pedro Robson Leão 20/04/2009 (última atualização em 13/04/2015)

[ Hits: 12.945 ]

Download script.sh

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ões atualizadas deste script

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.

Download mysql.tar.bz2


Esconder código-fonte

::::::::::::::                                         
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

Scripts recomendados

Configuração de VLANs

CGI Scan

Script para montagem de compartilhamento SAMBA (Gentoo)

Configurando um Servidor de Nomes no CL10 apenas respondendo algumas perguntas...

RSS para TAGS do CVS


  

Comentários
[1] Comentário enviado por removido em 23/04/2009 - 08:06h

Pedro,

o script para download não corresponde com o correto.

Abraço!

Felipe Cardoso Martins


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts