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 && ; $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.