msoliver
(usa Debian)
Enviado em 24/05/2022 - 18:51h
andryosribeiro escreveu:
msoliver escreveu:
andryosribeiro escreveu:
Pessoal, estou tentando automatizar esse processo, mas sem êxito, será que poderiam me ajudar?
Preciso que o script pegue o ID da conexão e execute o "explair for connection_id() xxx"
O que está errado?
#!/bin/bash
export sql="mysql -u root -p******** -h qualquerum -P3306"
id=$($sql -e "select connection_id();")
if [[ (( $id -eq 0 )) ]]
then
$sql -e "explain for connection_id $id;"
else
echo "Não deu certo"
fi
ERRO:
./teste: line 7: [[: connection_id()
8217303: syntax error in expression (error token is "() 8217303")
legal
Boa noite.
Qual o valor da var $id?
Antes do teste, coloque:
echo "ID: $id"
Para checar o valor.
Tudo indica que a mesma tem algo além de números....
A function:
SELECT CONNECTION_ID();
Retorna somente números!
---------------------------------------------------------------------------------------------------------------
Simulando o ERRO:
id="1000()"
[[ "$id" -eq 1000 ]] && echo Eh 1000 || echo Não é 1000
bash: [[: 1000(): erro de sintaxe na expressão (token de erro é "()")
Não é 1000
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________
Ele estava vindo com o cabeçalho também, por isso o erro. Obrigado Marcelo.
Agora a questão é que ele está pegando todos os $id de uma vez o que está gerando o erro.
Será que consigo fazer com que ele pegue e execute um por vez?
#!/bin/bash
LOG=/home/srvhorus/adm/bin/mymon/teste.log
export sql="mysql -u root -pxxxxxx -h legalaqui -P3306"
id=$($sql -s -N -e "select id from information_schema.processlist;")
echo "${id}" >> ${LOG} 2>> ${LOG}
if [[ (( $id -eq 0 )) ]];then
$sql -e "explain for connection ${id};" >> ${LOG} 2>> ${LOG}
fi
ERRO:
syntax error in expression (error token is "8218515
8218542
8217661
8218001
8218514")
Da pra ver que ele está pegando todos os IDs de uma vez.
Opção 1;
for id in $($sql -s -N -e "select id from information_schema.processlist;");do
[[ "$id" -eq 0 ]] && echo "faça algo"
done
# ----------------------------------------------------------------------------------------------- #
Opção 2:
$sql -s -N -e "select id from information_schema.processlist;" > $LOG
while read line;do
#TESTE condicional para cada $line
[[ "$line" -eq 0 ]] && echo "faça algo"
done<"$LOG"
#-------------------------------------------------------------------------------------------#
Direcione a saída do sql select para o xargs,
Exemplo:
printf "%s\n" {0..10}|xargs -ix bash -c "((x <= 5 )) && echo 'x <= 5' || echo 'x > 5'"
0 <= 5
1 <= 5
2 <= 5
3 <= 5
4 <= 5
5 <= 5
6 > 5
7 > 5
8 > 5
9 > 5
10 > 5
Ou com o grep:
for id in $($sql -s -N -e "select id from information_schema.processlist;");do
grep -Eq '^0$' <<< "$id" && echo $n:ÉZERO || echo $n:NZERO;
done
É isso,
______________________________________________________________________
Importante:
Se te ajudei, retribua.
É simples,
Marque o tópico como Resolvido e,
escolha a MELHOR RESPOSTA!
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________