Kontrollera ett värde i en MySQL -databas från ett Linux Bash -skript

0
59

Du kan få dina bash -skript att köra annorlunda baserat på innehållet i en MySQL databas genom att ansluta till den från kommandoraden och skicka en fråga, som du kan använda i if block till gren baserat på ett värde.

Obs! Våra exempel visar att du använder rotanvändaren på MySQL, men du skulle vill ersätta ett annat användarkonto där.

Kör SQL-frågor från ett Bash-skript

Syntaxen för körning i ett bash-skript är samma sak som att komma åt en databas från kommandoraden:

mysql -u root -pPassword -h värdnamn -D dbnamn -e 'fråga'

Om din databas körs lokalt kan du utelämna -h -flaggan. Om du kör en utvecklingsdatabas kan du utelämna -p -flaggan om din databas inte har något lösenord.

Detta kommer att resultera i sökfrågan till STDOUT, som du kan överföra till en fil:

mysql -u root -D dbname -e 'VÄLJ * FRÅN tabell' & gt; fil

… eller lagra i en variabel med $ () -konstruktionen:

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

Men utgången blir inte mycket vacker som standard, så du kan göra det enklare att arbeta med genom att använda -B -flaggan för att skriva ut i Tab Separated Values ​​(TSV) -format och -N -flaggan för att utelämna kolumnrubriker.

TSV-filer är den mindre använda kusinen till CSV-filer , som du kan konvertera från kommandoraden.

Kontroll av ett specifikt värde och förgrening

Om du vill förgrena dig baserat på ett värde i din databas kan du fråga efter den specifika raden och kolumnen och lagra svaret i en variabel. Du kan sedan använda en bash if block till gren baserat på innehållet i den variabeln.

field = $ (mysql -u root -BNe 'USE test; SELECT label FROM test WHERE id = 1') if [$ field == 'TEST']; sedan //göra saker fi

Detta fungerar bara när du begär ett specifikt värde och utför en enkel jämförelse. Om du behöver mer manipulation än bash ger kan du använda awk, som kan välja ut enskilda kolumner från text och göra jämförelser:

if [$ (echo $ field | awk '{if ($ 1 == value & amp; & amp) ; $ 2 == värde2) skriv ut 1; annars skriv ut 0} ') == “1”]; sedan //gör saker fi

​​Här skriver awk -kommandot ut sant eller falskt (1 eller 0), vilket bash if kan använda för att jämföra och förgrena.

Båda dessa exempel antar att din SQL -fråga bara returnerar en enda rad, vilket du kan garantera genom att välja baserat på ID. Men om du kör en mer komplex fråga kanske du vill begränsa svaret till den första raden med SQL -kommandot LIMIT 1.

RELATED: Så här exporterar du en CSV-fil från MySQL-kommandoraden

Felkontroll: Verifiera om en databas eller tabell finns

Medan du förmodligen skriver det här skriptet specifikt för din server, har någon felkontroll aldrig skadat någon. Du vill verifiera att databasen och tabellerna du kommer att arbeta med faktiskt existerar innan du krånglar med dem. Om anslutningen till databasen inte fungerar kommer den också att göra fel här ute.

Annonsering

SQL -kommandot 'ANVÄND dbnamn' ger ett fel om dbnamn inte &#8217 ; finns inte (returkod & gt; 0). Du kan använda detta i ett if -block för att kontrollera om databasen är korrekt konfigurerad:

if mysql -u root -e 'USE mydbname'; då finns //databas, gör saker fi

​​Du kan invertera if -blocket genom att starta boolean med en!, som bara kör koden när databasen inte är konfigurerad, vilket är användbart för att göra första gången installationen .

På samma sätt kan du kontrollera om det finns tabeller genom att försöka komma åt den första raden:

om mysql -u root -e 'USE mydbname; VÄLJ * FRÅN tabellnamnet LIMIT 1 '; då //databas och tabell finns, gör fler saker fi

​​Eftersom if -blocket kontrollerar returkoden för vilket kommando du hamnar i det och MySQL -kommandon kommer att returnera en felkod om de stöter på problem kan du använda valfritt kommando i ett if -block för att ta hänsyn till fel.