MySQL bash script

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

[ Hits: 12.171 ]

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
# [email protected]          

_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

Checa Host

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - APAGA AS MSG <.APAGADAS> GERADAS PELO SCRIPT delete_all_u

Barra de progresso em shell script com cores roxa e verde

Ajuste de horário e sincronismo

Salvaguardando configurações


  

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