Implementando Statement e RecordSet em bash script
Publicado por Pedro Robson Leão (última atualização em 02/12/2010)
[ Hits: 4.810 ]
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 ${@};
Script de compilação do Xorg 7.2 otimizado para Slackware 64 bits (Slamd64)
Criação de unidades criptografadas
Free VPN - download de VPNs do vpnbook.com
Limpar o cache da memória RAM apenas quando necessário
Converter Wav para MP3 usando Lame e PPSS para multi processamento via shell script - Asterisk
IA local no bolso, novo visual no Raspberry Pi OS e mais destaques do software livre
Kernel turbinado, compatibilidade em alta e debate sobre sustentabilidade: o dia no mundo Linux
Kernel turbinado e GNOME 49 dominam o giro do dia no mundo Linux
Novidades Linux: Kernel 6.17, distros em ebulição e segurança em foco
Kernel ganha novos linters Rust e distros avançam com recursos de IA
Adicionando o repositório backports no Debian 13 Trixie
Como definir um IP estático no Linux Debian
Orientação para instalar o Warsaw - módulo de proteção do Banco do Bra... (8)
systemd-resol... precisa ser reiniciado periodicamente (5)
Alguém que utilize o Warsaw do BB no Ubuntu 24.04 [RESOLVIDO] (6)
Fedora não reconhece James Donkey 102 Wireless Gaming Mouse (2)