Implementando Statement e RecordSet em bash script

Publicado por Pedro Robson Leão (última atualização em 02/12/2010)

[ Hits: 4.682 ]

Download statemant-script.sh




Já publiquei um script similar em: http://www.vivaolinux.com.br/script/MySQL-bash-script

Porém refactory é sempre bom para melhorar nossos códigos.

Bem, o exemplo a seguir é mais enxuto e funcional, mesmo tratando-se de um código conceitual explorando todo o poder do bash script.

  



Esconder código-fonte

#!/bin/bash

DB_USER='user';
DB_PWD='password';
DB_HOST='localhost';
DB="mysql"
DB_CLIENT="/usr/bin/mysql -u${DB_USER} -p${DB_PWD} -h${DB_HOST}  $( [ ! -z "${DB}" ] && echo ${DB} || echo "" ) -e ";

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

  local err=$(mktemp);

  RS=();

  IFS="|";

  local query=" ${DB_CLIENT} \"${@}\" 2>${err}";

  while read line ; do

  if [ ${ct} -eq 0 ] ; then
    FIELD=( ${line} );
  else
    _RS=( ${line} );

    local sz=${#FIELD[@]};
    local i=;

    for ((i=0;i<sz;i++)) ; do
      local row=$((ct-1));

      local field="${FIELD[$i]}";
      local value="${_RS[$i]}";

      field="${field//[- ]/_}";
      eval "${field}[$row]='${value}'";   
      RS[${row}]="${line}";
    done
  fi
  ct=$((ct+1));
  done < <( eval ${query} | sed 's/  /   /g' | tr '   ' '|' );

  IFS="${ifs}";

  DBERRMSG=$( cat ${err} && rm -f ${err} );

  test -z "${DBERRMSG}";
}

function main() {
  statement "SELECT Host,User FROM user" && {
    local rs=${#RS[@]};
    local i=;

    for ((i=0;i<rs;i++)) {
      printf "Line: %-20.20s\nHost: %-20.20s\nUser: %-20.20s\n\n" \
         ${i} "${Host[$i]}" "${User[$i]}";
    }
  } || {
    echo ">>> ${DBERRMSG}";
  }
}

main ${@};

Scripts recomendados

Slackware multilib-upgrade

Retra de iptables para DMZ na porta 80

Claro 3G no Ubuntu 8.04

Script de iniclização do Exim para Funcionamento com MailScanner

Acompanhamento de log squid com hora real


  

Comentários
[1] Comentário enviado por michel5670 em 05/12/2010 - 10:12h

Cara eu mexo com linux a 5 anos e as vezes penso que ja sei alguma coisa mas quando vejo esses codigos vejo que ainda não sei nada rsrsrsrsr.....
Parabéns pelo script muito funcional e profissional.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts