Verifica un valore in un database MySQL da uno script bash di Linux

Contenuti

Fai in modo che gli script bash vengano eseguiti in modo diverso in base al contenuto di un database MySQL connettendoti ad esso dalla riga di comando e passando una query.

Puoi fare in modo che i tuoi script bash vengano eseguiti in modo diverso in base al contenuto di un database MySQL collegandoti ad esso dalla riga di comando e passando una query, che puoi usare in if blocchi da ramificare in base a un valore.

Nota: I nostri esempi mostrano l'uso dell'utente root in MySQL, ma vorresti sostituire un altro account utente lì.

Esegui query SQL da uno script bash

La sintassi per l'esecuzione all'interno di uno script bash è la stessa dell'immissione in un database dalla riga di comando:

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

Se il tuo database viene eseguito localmente, puoi saltare il -h bandiera. Se stai eseguendo un database di sviluppo, puoi saltare il -p controlla se il tuo database non ha password.

Questo genererà i risultati della query in STDOUT, che può reindirizzare a un file:

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

… o memorizzare in una variabile con il $( ) costruire:

variabile=$(mysql -u root -D nomedb -e 'SELECT * DA tabella')

Ma, l'output non sarà molto carino per impostazione predefinita, così puoi semplificare il lavoro utilizzando il -B per stampare in formato valore separato da tabulazioni (TSV) e il -N seleziona per omettere le intestazioni di colonna.

Usa il flag -B per stampare in formato valore separato da tabulazioni (TSV) e il flag -N per saltare le intestazioni delle colonne.

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

Controllo di un valore specifico e ramificazione

Se vuoi effettuare un fork in base a un valore nel tuo database, puoi interrogare la riga e la colonna specifiche e memorizzare la soluzione in una variabile. Prossimo, puoi usare a provato if bloccare ramificare in base al contenuto di quella variabile.

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

Se [ $campo == 'TEST' ]; then
    //do stuff
fi

Questo funziona solo quando si richiede un valore specifico e si effettua un semplice confronto. Se hai bisogno di più manipolazione di quanto bash fornisca, Puoi usare awk, che è possibile scegliere singole colonne di testo e fare confronti:

Se [ $(eco $field | imbarazzante '{Se ($1 == valore && $2 == valore2) Stampa 1; else stampa 0}') == "1" ]; then
    //do stuff
fi

Qui il awk Il comando stampa true o false (1 oh 0), rispetto al bash if può essere utilizzato per confrontare e forcellare.

In entrambi gli esempi si presuppone che la query SQL restituisca solo una singola riga, cosa puoi garantire selezionando in base all'ID. Ma se stai eseguendo una query più complessa, potresti voler limitare la soluzione alla prima riga con il comando SQL LIMIT 1.

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

Verifica degli errori: controlla se esiste un database o una tabella

Anche se probabilmente stai scrivendo questo script appositamente per il tuo server, un piccolo controllo dei bug non fa mai male a nessuno. Dovrai verificare che il database e le tabelle con cui lavorerai esistano effettivamente prima di iniziare a lavorarci.. Allo stesso tempo, Se la connessione al database non funziona, Anche un errore si verificherà qui.

Il comando SQL 'USE dbname' avrà esito negativo se dbname non esiste (código de retorno> 0). È possibile utilizzarlo in un if per verificare se il database è configurato correttamente:

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

fi

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

Nello stesso modo, È possibile verificare la presenza di tabelle quando si tenta di immettere la prima riga:

if mysql -u root -e 'USE mydbname; SELEZIONARE * DA tablename LIMIT 1'; then

   //database and table exist, do more stuff

fi

Perché la if block controlla il codice restituito di qualsiasi comando inserito su di esso, e i comandi mysql restituiranno un codice di errore in caso di problemi, È possibile utilizzare qualsiasi comando in un if blocco per prestare attenzione agli errori.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.