Pular para o conteúdo principal

+ 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


#!/bin/bash 

# usuario do banco de dados
DB_USER='user';
# senha do banco de dados
DB_PWD='password';
# host do banco de dados
DB_HOST='localhost';
# nome do banco de dados
DB="mysql"
# linha con informacoes do cliente do banco de dados
DB_CLIENT="/usr/bin/mysql -u${DB_USER} -p${DB_PWD} -h${DB_HOST}  $( [ ! -z "${DB}" ] && echo ${DB} || echo "" ) -e ";

# funcao statment
function statement() {
  local ifs=${IFS};
  local line=;
  local ct=0;

  local err=$(mktemp);

  RS=();

  # \t  = separador padrao
  IFS="$( printf '\t' )";

  # monta o comando de execucao da query com o devido direcionamento
  local query=" ${DB_CLIENT} \"${@}\" 2>${err}";

  # le linha a linha a saida do comando
  while read line ; do

    if [ ${ct} -eq 0 ] ; then
      # gera um vetor com o nome dos campos
      FIELD=( ${line} );
    else
      # pega cada uma das linhas de dados
      _RS=( ${line} );

      # conta o numero de colunas
      local sz=${#FIELD[@]};
      local i=;

      for ((i=0;i<sz;i++)) ; do
 # trata cada uma das colunas
 local row=$((ct-1));

 #separa nome da coluna e valor linha x coluna
 local field="${FIELD[$i]}";
 local value="${_RS[$i]}";

 #gera de forma dinamica a variavel nome da coluna indexada por linha
 field="${field//[- ]/_}";
 eval "${field}[$row]='${value}'"; 
 #incrementa RecordSet
 RS[${row}]="${line}";
      done
    fi
    # incrementa linhas
    ct=$((ct+1));
  done < <( eval ${query} );

  # restaura IFS
  IFS="${ifs}";

  # possivel mensagem de erro
  DBERRMSG=$( cat ${err} && rm -f ${err} );

  # gera retorno a partir da mensagem de erro
  test -z "${DBERRMSG}";
}

# funcao principal
function main() {
  # query de execucao do statment
  statement "SELECT Host,User FROM user" && {
    # conta resultados no recorset
    local rs=${#RS[@]};
    local i=;

    # navega pelas linhas do recordset
    for ((i=0;i<rs;i++)) {
      # mostra recordset e elementos por nome
      printf "RS[%d]=\"%s\"\nHost: %20.20s\nUser: %20.20s\n\n" \
       ${i} "${RS[$i]}" "${Host[$i]}" "${User[$i]}";
    }
  } || {
    #mostra mensagem de erro
    echo ">>> ${DBERRMSG}";
  }
}

main ${@};

Comentários

  1. Achei que ficou tao legal que não parei de fuçar !
    Agora a saída fica assim:

    pleao@pleao:~$ bash mysql.sh
    RS[0]="% admtiaxa"
    Host: %
    User: admtiaxa

    RS[1]="127.0.0.1 root"
    Host: 127.0.0.1
    User: root

    RS[2]="localhost debian-sys-maint"
    Host: localhost
    User: debian-sys-maint

    RS[3]="localhost root"
    Host: localhost
    User: root

    RS[4]="pleao root"
    Host: pleao
    User: root

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

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 , 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 ) : ...

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