Journal probleme programation bash

Posté par  .
Étiquettes : aucune
0
15
nov.
2003
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  (site web personnel) . É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.
    • [^] # Re: probleme programation bash

      Posté par  . É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.

Suivre le flux des commentaires

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