Verificar un valor en una base de datos MySQL desde un script Bash de Linux

Contenidos

Haga que los scripts de bash se ejecuten de manera diferente según el contenido de una base de datos MySQL conectándose a ella desde la línea de comandos y pasando una consulta.

Puede hacer que sus scripts bash se ejecuten de manera distinto según el contenido de una base de datos MySQL conectándose a ella desde la línea de comando y pasando una consulta, que puede utilizar en if bloques para bifurcar en función de un valor.

Nota: Nuestros ejemplos muestran el uso del usuario root en MySQL, pero le gustaría sustituir una cuenta de usuario distinto allí.

Ejecutar consultas SQL desde un script Bash

La sintaxis para ejecutar dentro de un script bash es la misma que para entrar a una base de datos desde la línea de comandos:

mysql -u root -pPassword -h hostname -D dbname -e 'query'

Si su base de datos se ejecuta localmente, puede omitir el -h bandera. Si está ejecutando una base de datos de desarrollo, puede omitir el -p marque si su base de datos no tiene contraseña.

Esto generará los resultados de la consulta en STDOUT, que puede canalizar a un archivo:

mysql -u root -D dbname -e 'SELECT * FROM table' > file

… o almacenar en una variable con el $( ) construir:

variable=$(mysql -u root -D dbname -e 'SELECT * FROM table')

Pero, la salida no será muy bonita de forma predeterminada, por lo que puede facilitar el trabajo usando el -B para imprimir en formato de valores separados por tabuladores (TSV) y la -N marca para omitir los encabezados de columna.

Utilice el indicador -B para imprimir en formato de valores separados por tabulaciones (TSV) y el indicador -N para omitir los encabezados de columna.

Los archivos TSV son los primos menos utilizados de los archivos CSV, que puede convertir desde la línea de comandos.

Comprobación de un valor específico y ramificación

Si desea realizar una bifurcación en función de un valor en su base de datos, puede consultar la fila y columna específicas y almacenar la solución en una variable. A continuación, puede usar un intento if cuadra para ramificarse en función del contenido de esa variable.

field=$(mysql -u root -BNe 'USE test; SELECT label FROM test WHERE id=1')

if [ $field == 'TEST' ]; then
    //do stuff
fi

Esto solo funciona cuando solicita un valor específico y realiza una comparación simple. Si necesita más manipulación de la que proporciona bash, puede utilizar awk, que puede elegir columnas individuales del texto y realizar comparaciones:

if [ $(echo $field | awk '{if ($1 == value && $2 == value2) print 1; else print 0}') == "1" ]; then
    //do stuff
fi

Aquí el awk El comando imprime verdadero o falso (1 o 0), que el bash if puede usar para comparar y bifurcar.

Ambos ejemplos asumen que su consulta SQL solo devuelve una sola fila, lo que puede garantizar seleccionando según el ID. Pero si está ejecutando una consulta más compleja, es factible que desee limitar la solución a la primera fila con el comando SQL LIMIT 1.

RELACIONADO: Cómo exportar un archivo CSV desde la línea de comandos de MySQL

Verificación de errores: verificar si existe una base de datos o una tabla

Aunque es probable que esté escribiendo este script específicamente para su servidor, un poco de verificación de errores nunca perjudica a nadie. Querrá verificar que la base de datos y las tablas con las que trabajará verdaderamente existen antes de comenzar a trabajar con ellas. Al mismo tiempo, si la conexión a la base de datos no funciona, además se producirá un error aquí.

El comando SQL 'USE dbname' producirá un error si dbname no existe (código de retorno> 0). Puede utilizar esto en un if block para chequear si la base de datos está configurada correctamente:

if mysql -u root -e 'USE mydbname'; then
  
    //database exists, do stuff

fi

Puede invertir el if bloque comenzando el booleano con un !, que ejecutará el código solo cuando la base de datos no esté configurada, lo cual es útil para realizar la configuración por primera vez.

De la misma forma, puede verificar si existen tablas al intentar entrar a la primera fila:

if mysql -u root -e 'USE mydbname; SELECT * FROM tablename LIMIT 1'; then

   //database and table exist, do more stuff

fi

Debido a que el if block comprueba el código de retorno de cualquier comando que coloque en él, y los comandos de MySQL devolverán un código de error si disponen problemas, puede utilizar cualquier comando en un if bloquear para prestar atención los errores.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.