Script Bash Boucle Via MySQL
J'ai besoin d'un script bash qui peuvent récupérer les données MySQL à partir d'une distance de la base de données. En fait je l'ai fait, mais ce que je dois faire maintenant c'est de la boucle dans les enregistrements d'une certaine façon et passer une variable à un autre fichier bash.
Voici mon MySQL appel:
mysql -X -u $MyUSER -p$MyPASS -h$MyHOST -D$MyDB -e'SELECT `theme_name`, `guid` FROM `themes` WHERE `theme_purchased`="1" AND `theme_compiled`='0';' > themes.xml
download_themes.sh
Il exporte les données dans un fichier xml appelé theme.xml maintenant, j'essayais juste de trouver un moyen de faire une boucle par les données. Je suis en essayant d'éviter de PHP et perl et juste essayer d'utiliser bash. Merci à l'avance.
Est-il une raison spécifique pour laquelle vous voulez éviter les langages de script? Vous ne serez pas en mesure d'analyser xml correctement dans bash. Vous pourriez même avoir des problèmes unescaping la sortie. Pourquoi ne pas aller dans la voie de la facilité et de l'utilisation de php / perl / python / lua / java / tcl / javascript / ... ou sérieusement de quelque chose en dehors de bash qui ne pourront tout simplement pas être en mesure de le faire correctement pour de nombreuses sorties?
Vous ne savez pas si il existe un moyen de sortie comme un tableau et une boucle par qui? J'ai Googlé cela peut je ne pouvais pas trouver quoi que ce soit.
Vous ne savez pas si il existe un moyen de sortie comme un tableau et une boucle par qui? J'ai Googlé cela peut je ne pouvais pas trouver quoi que ce soit.
OriginalL'auteur Brian Leishman | 2011-05-07
Vous devez vous connecter pour publier un commentaire.
quelque chose comme:
en bref: la
mysql
les sorties de commande d'enregistrement séparés par des '\n' et de champs séparés par des '\t' lorsque la sortie est à un tuyau. leread
commande lit une ligne, fentes dans les champs, et met chacun sur une variable.si vos données a des espaces dans les champs, vous obtenez des problèmes avec la valeur par défaut
read
de fractionnement. il y a certains égards, mais si vous êtes seulement de lire les deux champs et l'un d'eux ne devrait pas avoir d'espaces (comme lesguid
), alors vous pouvez mettre le "dangereux" du champ à la fin, etread
de tout mettre "extra" dans la dernière variable.comme ceci:
done' /winterboard_theme_builder/get_themes.sh: line 9:
fait"Effectivement le faire, c'était sur la mauvaise ligne, mais puis-je obtenir une autre erreur. Il est dit /winterboard_theme_builder/get_themes.sh: ligne 7: lire: "nom_du_thèmes,': n'est pas un identificateur valide
oh, à droite. pas de virgule entre
read
arguments, et un point-virgule avantdo
. fixeMerci! pas de son travail une grande!
J'ai un problème avec cette approche. Lorsque vous avez dans votre boucle de résultats lorsque les cellules de la colonne ont 2 mot , puis la commande affecter une partie de la première variable à 1 et l'autre partie à 2 . Disons que si $nom_du_thèmes="Nom du Thème" et $guid="12", en db, alors cette commande fera l'écho de thème:thème guid:Nom 12 . Aucune idée de comment résoudre ce problème???? thème: LalaPala, guid: 44.5,40.18,44.52,40.17 thème: San, guid: Francisco -122.58,37.81,-122.33,37.71 thème: Edirne, guid: 26.51,41.69,26.64,41.64
OriginalL'auteur
Plutôt que de la sortie XML, puis-je vous suggérer d'utiliser simplement la
SELECT INTO OUTFILE
de syntaxe ou demysql --batch --raw
pour la sortie des valeurs délimitées par des tabulations. Vous avez alors beaucoup plus facile d'accès par le biais de bash pour le reste de l'Unix de la chaîne, commecut
etawk
pour récupérer les champs dont vous avez besoin et de les réutiliser avec Bash. Aucun autre langage de script est nécessaire et vous n'avez pas besoin de gâchis avec XML.awk print
. Merci!OriginalL'auteur
La accepté de répondre ne fonctionne pas lorsque les espaces sont dans la sortie. C'est une solution facile (IFS=$'\t' -- Note $ -- c'est bizarre):
Vous aurez, bien sûr, vous voulez le remplacer par votre propre requête.
OriginalL'auteur
Pipe'|', tout est dangereux, pour les modifications à l'intérieur de la boucle se produire dans un autre sous-processus et de ne pas les prendre effet dans le script courant.
En passant, je déteste tourner vers le fichier externe solution.
Je suggère d'utiliser "Processus De Substitution".
OriginalL'auteur