Vérifier une valeur dans une base de données MySQL à partir d'un script Linux Bash

0
221

Vous pouvez exécuter vos scripts bash différemment en fonction du contenu d'une base de données MySQL en vous y connectant à partir du ligne de commande et en passant une requête, que vous pouvez utiliser dans if blocks pour créer une branche en fonction d'une valeur.

Remarque : Nos exemples montrent l'utilisation de l'utilisateur root sur MySQL, mais vous voudriez substituer un compte utilisateur différent là.

Exécuter des requêtes SQL à partir d'un script Bash

La syntaxe pour s'exécuter dans un script bash est la même que pour accéder à une base de données à partir de la ligne de commande :

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

Si votre base de données s'exécute localement, vous pouvez omettre l'indicateur -h. Si vous exécutez une base de données de développement, vous pouvez omettre l'indicateur -p si votre base de données n'a pas de mot de passe.

Cela affichera les résultats de la requête dans STDOUT, que vous pourrez rediriger vers un fichier :

mysql -u root -D nom_base -e 'SELECT * FROM table' > fichier

…ou stockez dans une variable avec la construction $( ) :

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

Mais, la sortie ne sera pas très jolie par défaut, vous pouvez donc le rendre plus facile à travailler avec en utilisant l'indicateur -B pour imprimer au format TSV (Tab Separated Values) et l'indicateur -N pour omettre les en-têtes de colonne.

Les fichiers TSV sont le cousin moins utilisé des fichiers CSV, que vous pouvez convertir à partir de la ligne de commande.

Vérification une valeur et un embranchement spécifiques

Si vous souhaitez créer une branche en fonction d'une valeur dans votre base de données, vous pouvez rechercher la ligne et la colonne spécifiques et stocker la réponse dans une variable. Vous pouvez ensuite utiliser un bloc bash if pour créer une branche en fonction du contenu de cette variable.

field=$(mysql -u root -BNe 'USE test; SELECT label FROM test WHERE id=1') if [ $field == 'TEST' ]; alors //faire des trucs fi

Cela ne fonctionne que lorsque vous demandez une valeur spécifique et effectuez une comparaison simple. Si vous avez besoin de plus de manipulations que bash, vous pouvez utiliser awk, qui peut sélectionner des colonnes individuelles à partir du texte et effectuer des comparaisons :

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

Ici, la commande awk affiche true ou false (1 ou 0), que le bash if peut utiliser pour comparer et créer une branche.

Ces deux exemples supposent que votre requête SQL ne renvoie qu'une seule ligne, ce que vous pouvez garantir en sélectionnant en fonction de l'ID. Mais si vous exécutez une requête plus complexe, vous souhaiterez peut-être limiter la réponse à la première ligne avec la commande SQL LIMIT 1.

RELATED : Comment exporter un fichier CSV depuis la ligne de commande MySQL

Vérification des erreurs : vérifier si une base de données ou une table existe

Bien que vous écriviez probablement ce script spécifiquement pour votre serveur, un peu de vérification des erreurs n'a jamais fait de mal à personne. Vous voudrez vérifier que la base de données et les tables avec lesquelles vous travaillerez existent réellement avant de les manipuler. De plus, si la connexion à la base de données ne fonctionne pas, il y aura également une erreur ici.

Publicité

La commande SQL “USE dbname” produira une erreur si dbname ne fonctionne pas. ;t existe (code de retour > 0). Vous pouvez l'utiliser dans un bloc if pour vérifier si la base de données est correctement configurée :

if mysql -u root -e 'USE mydbname'; alors //la base de données existe, faire des trucs fi

Vous pouvez inverser le bloc if en commençant le booléen par un !, qui exécutera le code uniquement lorsque la base de données n'est pas configurée, ce qui est utile pour effectuer la première configuration .

De même, vous pouvez vérifier si des tables existent en essayant d'accéder à la première ligne :

if mysql -u root -e 'USE mydbname; SELECT * FROM tablename LIMIT 1'; alors //la base de données et la table existent, faites plus de choses fi

Parce que le bloc if vérifie le code de retour de la commande que vous y mettez, et les commandes MySQL renverront un code d'erreur si elles rencontrent des problèmes, vous pouvez utiliser n'importe quelle commande dans un bloc if pour tenir compte des erreurs.