Derniers journaux de mouquiette :

Journal : probleme programation bash

Posté par Toto () le 15 novembre 2003
0
Bonjour,

Je me suis mis à la programmation bash aujourd'hui, et je rencontre un petit probleme. Un exemple valant mieux qu'un long discours :

morceau de script :
for words in $($MYSQL_CMD | grep -v row | grep -v words:)
do
if ! grep "$(cat ${TMP_DIR}${words})" $TMP_FILE >/dev/null 2>&1
then
echo -e \\n >> $TMP_FILE
echo "*****************************" >> $TMP_FILE
echo -e \\n >> $TMP_FILE
cat ${TMP_DIR}${words} >> $TMP_FILE
fi
done


Résultat attendu :

*******************

Une news


*******************

Une autre news



Résultat obtenu ;

******************

Une news
Une autre news


résultat de la commande Mysql :
******* row 1 *******
words:
Une news
Une autre news


Comment faire pour que cela marche ?
Merci de vos réponses.

> Lire le journal (2 commentaires, moyenne: 2).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Re: probleme programation bash

Posté par -=[ Benoit Plessis ]=- (page perso, ) le 15/11/2003 à 20:56. (lien). Évalué à 3.

Bon d'abord:
echo -e \\n >> $TMP_FILE
c'est un peu redondant, un simple echo >> $TMP_FILE sera amplement suffisant.

Ensuite si j'ai bien compris la requete sql te renvoi des noms de fichiers contenant tes news ? (rq en passant l'interet d'une bdd
c'est d'eviter de stocker des trucs a l'exterieur mais passonts).
si ta commande te renvoi des noms avec espace comme tu le dit alors ton script va avoir besoin d'un gros dégraissage.


Si tu veut pas te faire chier, utilise perl, c'set 10x plus adapté a ce que tu veut faire (Practical Extraction and Report Langage)
avec un module sql en plus c'est encore plus simple:


#!/usr/bin/perl -w

use DBI;
# note les champs peuvent etre initialiser via $ARGV[]
my $database = "";
my $hostname = "";
my $port = "";

my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";

my $user = "";
my $password = "";
my $dbh = DBI->connect($dsn, $user, $password);

my $newsbase = "/tmp";

$r = $dbh->prepare("SELECT row FROM foo WHERE bla");
$r->execute();

while (my ($title) = $r->fetchrow_array()) {
if (open (NEWS, "<$newsbase/$title")) {
$news = "";
while () {
chop;
$news .= " ".$_;
}
close NEWS;
write();
}
}

format STDOUT_TOP =
News Report
.

format STDOUT =
************************

Titre: @<<<<<<<<<<<<<<<<
$title,
@*
$news

.


tu peut aussi ouvrir un fichier et ecrire dedans (write(OUTFILE); ou print OUTFILE "";)

enfin tu peut tout quoi.

--
Il [e2fsck] a bien démarré, mais il m'a rendu la main aussitot en me disant "houlala, c'est pas beau à voir votre truc, je préfèrerai que vous teniez vous même la tronçonneuse" (traduction libr
  • [^]Re: probleme programation bash

    Posté par Toto () le 15/11/2003 à 21:26. (lien). Évalué à 1.

    Merci, je vais tester ca (et demander à l'admin s'il veut bien activer le perl, une fois que je saurais m'en servir ;) )

    Sinon, c'etait juste une partie de script, donc c'est vrai que vu comme ca l'interet était peu évident.

Revenir en haut de page