Implementando Statement e RecordSet em bash script
Publicado por Pedro Robson Leão (última atualização em 02/12/2010)
[ Hits: 4.927 ]
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 ${@};
Simples inventário de máquinas em Shell Script
Estok SH 1.2b - Controle de Estoque em Shell Script
Papagaiando o XFCE com temas e recursos
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Como cortar as partes de um vídeo com passagens de áudio em branco
Tiling automático no KDE Plasma
SNMP Scan no OCS Inventory só funciona com HTTPS corretamente configurado
Links importantes de usuários do vol (4)
GOG confirma suporte oficial ao sistema Linux: "o trabalho começo... (2)
Para os fãs de DOOM, um vídeo do Romero (com dublagem em pt-br disponí... (2)









