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
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 ${@};
Achei que ficou tao legal que não parei de fuçar !
ResponderExcluirAgora 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