Controlla un valore in un database MySQL da uno script Linux Bash

0
43

Puoi far funzionare i tuoi script bash in modo diverso in base al contenuto di un MySQL database collegandosi ad esso dalla riga di comando e passando una query, che puoi utilizzare se i blocchi per diramare in base a un valore.

Nota: i nostri esempi mostrano l'utilizzo dell'utente root su MySQL, ma dovresti desidera sostituire un account utente diverso lì.

Esegui query SQL da uno script Bash

La sintassi per l'esecuzione all'interno di uno script bash equivale ad accedere a un database dalla riga di comando:

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

Se il database è in esecuzione localmente, puoi omettere il flag -h. Se stai eseguendo un database di sviluppo, puoi omettere il flag -p se il tuo database non ha password.

Questo restituirà i risultati della query a STDOUT, che puoi reindirizzare a un file:

mysql -u root -D nomedb -e 'SELECT * FROM tabella' > file

…o memorizza in una variabile con il costrutto $( ):

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

Tuttavia, l'output non sarà molto carino per impostazione predefinita, quindi puoi semplificare il lavoro utilizzando il flag -B per stampare in formato Tab Separated Values ​​(TSV) e il flag -N per omettere le intestazioni di colonna.

I file TSV sono i cugini meno utilizzati dei file CSV , che puoi convertire dalla riga di comando.

Verifica di un valore specifico e diramazione

Se vuoi ramificare in base a un valore nel tuo database, puoi eseguire una query per la riga e la colonna specifiche e memorizzare la risposta in una variabile. Puoi quindi utilizzare un bash if block to branch in base al contenuto di quella variabile.

field=$(mysql -u root -BNe 'USE test; SELECT label FROM test WHERE id=1') if [ $field == 'PROVA' ]; poi //faccio le cose per

Funziona solo quando richiedi un valore specifico ed esegui un semplice confronto. Se hai bisogno di più manipolazioni di quelle fornite da bash, puoi usare awk, che può selezionare singole colonne dal testo ed eseguire confronti:

if [ $(echo $field | awk '{if ($1 == valore &&amp ; $2 == valore2) print 1; else print 0}') == “1” ]; then //do stuff fi

Qui, il comando awk stampa true o false (1 o 0), che bash if può utilizzare per confrontare e ramificare.

Entrambi questi esempi presuppongono che la tua query SQL restituisca solo una singola riga, cosa che puoi garantire selezionando in base all'ID. Ma se stai eseguendo una query più complessa, potresti voler limitare la risposta alla prima riga con il comando SQL LIMIT 1.

RELAZIONATO: Come esportare un file CSV dalla riga di comando di MySQL

Controllo errori: verifica se esiste un database o una tabella

Anche se probabilmente stai scrivendo questo script appositamente per il tuo server, un po' di controllo degli errori non ha mai fatto male a nessuno. Ti consigliamo di verificare che il database e le tabelle con cui lavorerai esistano effettivamente prima di occupartene. Inoltre, se la connessione al database non funziona, verrà visualizzato un errore anche qui.

Annuncio

Il comando SQL “USE dbname” produrrà un errore se dbname non funziona ;t esiste (codice di ritorno > 0). Puoi usarlo in un blocco if per verificare se il database è configurato correttamente:

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

Puoi invertire il blocco if avviando il booleano con un !, che eseguirà il codice solo quando il database non è configurato, il che è utile per la configurazione iniziale .

Analogamente, puoi verificare se le tabelle esistono provando ad accedere alla prima riga:

if mysql -u root -e 'USE mydbname; SELECT * FROM nometabella LIMIT 1'; allora //il database e la tabella esistono, fai più cose fi

Poiché il blocco if controlla il codice di ritorno di qualsiasi comando tu ci inserisca e i comandi MySQL restituiranno un codice di errore se incontrano problemi, puoi usare qualsiasi comando in un blocco if per tenere conto degli errori.