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.
# Re: probleme programation bash
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 3.
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.
[^] # Re: probleme programation bash
Posté par Toto . Évalué à 1.
Sinon, c'etait juste une partie de script, donc c'est vrai que vu comme ca l'interet était peu évident.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.