Implementando Statement e RecordSet em bash script
Publicado por Pedro Robson Leão (última atualização em 02/12/2010)
[ Hits: 4.682 ]
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.
#!/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 ${@};
Retra de iptables para DMZ na porta 80
Script de iniclização do Exim para Funcionamento com MailScanner
Acompanhamento de log squid com hora real
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
firefox nao guarda meus logins nos sites (1)
Instalar debian testing (13) "por cima" do debian 12 (2)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (1)