Implementando Statement e RecordSet em bash script

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

[ Hits: 4.306 ]

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

Init Service for Slackware

Compartilhamento de conexão

Plugin para o Nagios monitorar o vencimento do certificado Zimbra

LinuxMint-19.03 After Install

Captura ip estatico !!


  

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