Verificar um valor em um banco de dados MySQL a partir de um script bash Linux

Conteúdo

Faça com que os scripts bash sejam executados 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.

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.

Use o sinalizador -B para imprimir em formato de valor separado por tabulação (TSV) e o sinalizador -N para pular títulos 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.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.