web-dev-qa-db-fra.com

bash - Sorties de requête SQL vers une variable

Je suis nouveau dans les scripts bash. Je veux enregistrer les sorties sql-query dans une variable, mais

en fait je dois me connecter pour chaque requête à mysql avec:

mysql -u $MYUSER -p$MYPASS -D database

et souhaitez enregistrer chaque sortie dans une variable distincte

exemple de requête: SELECT domain FROM domains WHERE user='$USER'

à

$variable1 = FIRST_OUTPUT
$variable2 = 2ND_OUTPUT

merci

12
mostworld77

Tiré de script bash - sélectionnez la base de données dans la variable , vous pouvez lire le résultat de la requête dans une variable.

Exemple

mysql> SELECT * FROM domains;
+-------+---------+
| user  | domain  |
+-------+---------+
| user1 | domain1 |
| user2 | domain2 |
| user3 | domain3 |
+-------+---------+

Usage

$ myvar=$(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")
$ echo $myvar
domain1 domain2 domain3

echo est la commande bash pour la sortie. Vous pouvez alors split $myvar dans des variables distinctes :

$ read var1 var2 var3 <<< $myvar
$ echo $var1
domain1
$ echo $var2
domain2

Vous pouvez combiner ces deux commandes en une seule:

read var1 var2 var3 <<< $(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")

Il est possible de stocker les résultats dans des tableaux (utile si vous ne connaissez pas le nombre d'enregistrements):

$ read -ra vars <<< $(mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains")
$ for i in "${vars[@]}"; do
$     echo $i
$ done
domain1
domain2
domain3
23
Yang

Une autre façon de faire est:

dbquery=`mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains"`      
dbquery_array=( $( for i in $dbquery ; do echo $i ; done ) )

La première ligne stocke toutes les sorties de la requête dans une variable dbquery d'une manière semblable à un tableau. La deuxième ligne convertit le dbquery en un tableau dbquery_array avec une simple boucle for.

2
3kstc

J'ai fait ça

variable = mysql -u root -ppassworrd database << EOF select MAX(variable) AS a from table where variable2 = 'SOMETEXT' AND day(datevalue) >= 22; EOF

J'espère que ça aide

2
Jorge Magos