Você pode fazer seus scripts bash rodarem de maneira diferente com base no conteúdo de um banco de dados MySQL conectando-se a ele a partir da linha de comando e passando uma consulta, que você pode usar em if
blocos para ramificar com base em um valor.
Observação: Nossos exemplos mostram o uso do usuário root no MySQL, mas você gostaria de substituir uma conta de usuário diferente lá.
Execute consultas SQL a partir de um script bash
A sintaxe para executar dentro de um script bash é a mesma que para inserir um banco de dados a partir da linha de comando:
mysql -u root -pPassword -h hostname -D dbname -e 'query'
Se o seu banco de dados for executado localmente, você pode pular o -h
bandeira. Se você estiver executando um banco de dados de desenvolvimento, você pode pular o -p
verifique se o seu banco de dados não tem senha.
Isso irá gerar os resultados da consulta em STDOUT, que pode direcionar para um arquivo:
mysql -u root -D dbname -e 'SELECT * DA mesa ' > Arquivo
… ou armazene em uma variável com o $( )
acumular:
variável = $(mysql -u root -D dbname -e 'SELECT * DA mesa ')
Mas, a saída não será muito bonita por padrão, para que você possa tornar o trabalho mais fácil usando o -B
para imprimir em formato de valor separado por tabulação (TSV) e a -N
marque para omitir cabeçalhos de coluna.
Os arquivos TSV são os primos menos usados dos arquivos CSV, que você pode converter a partir da linha de comando.
Verificar um valor específico e ramificação
Se você deseja bifurcar com base em um valor em seu banco de dados, você pode consultar a linha e coluna específicas e armazenar a solução em uma variável. A seguir, você pode usar um tentou if
bloquear para ramificar com base no conteúdo dessa variável.
campo = $(teste de USO mysql -u root -BNe '; SELECIONE o rótulo DO teste ONDE id=1')
E se [ $campo == 'TESTE' ]; then
//do stuff
fi
Isso só funciona quando você solicita um valor específico e faz uma comparação simples. Se você precisar de mais manipulação do que o que o bash oferece, você pode usar awk
, que você pode escolher colunas individuais do texto e fazer comparações:
E se [ $(echo $ field | awk '{E se ($1 == valor && $2 == valor2) imprimir 1; outra impressão 0}') == "1" ]; then
//do stuff
fi
Aqui o awk
O comando imprime verdadeiro ou falso (1 o 0), que a festa if
você pode usar para comparar e bifurcar.
Ambos os exemplos presumem que sua consulta SQL retorna apenas uma única linha, que você pode garantir selecionando de acordo com o ID. Mas se você estiver executando uma consulta mais complexa, você pode querer limitar a solução para a primeira linha com o comando SQL LIMIT 1
.
RELACIONADO: Como exportar um arquivo CSV da linha de comando do MySQL
Verificação de erros: verifique se existe um banco de dados ou tabela
Embora você provavelmente esteja escrevendo este script especificamente para o seu servidor, uma pequena verificação de bug nunca faz mal a ninguém. Você desejará verificar se o banco de dados e as tabelas com as quais trabalhará realmente existem antes de começar a trabalhar com eles.. Ao mesmo tempo, se a conexão com o banco de dados não funcionar, além disso, ocorrerá um erro aqui.
O comando SQL 'USE dbname'
irá produzir um erro se dbname
não existe (código de retorno> 0). Você pode usar isso em um if
bloquear para verificar se o banco de dados está configurado corretamente:
se mysql -u raiz -e 'USE mydbname'; then //database exists, do stuff fi
Você pode investir o if
bloquear começando boolean com um !
, que executará o código somente quando o banco de dados não estiver configurado, o que é útil para a configuração pela primeira vez.
Da mesma forma, você pode verificar para tabelas quando você tentar entrar na primeira linha:
se mysql -u raiz -e 'USE mydbname; SELECIONAR * DO nome DE tabela LIMITE 1'; then //database and table exist, do more stuff fi
Porque o if
bloco verifica o código de retorno de qualquer comando que você coloque nele, e os comandos do MySQL retornarão um código de erro se tiverem problemas, você pode usar qualquer comando em um if
bloquear para prestar atenção aos erros.