IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

echo -e ne fonctionne pas


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut echo -e ne fonctionne pas
    Bonjour à tous,

    Voici mon script complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #!/bin/bash
    # @(#) tripersonnes
     
     
    <<COMMENT1
    On dispose d’un fichier personnes dont chaque ligne est constituée du prénom et du
    genre (m pour masculin, f pour féminin) d’un individu.
     
    Ex : $ cat personnes
    arthur m
    pierre m
    dominique f
    paule f
    sylvie f
    jean m
    $
     
    Ecrire un programme shell tripersonnes qui crée à partir de ce fichier, un fichier
    garcons contenant uniquement les prénoms des garçons et un fichier filles contenant
    les prénoms des filles.
    COMMENT1
     
     
     
    if test -f "./filles.txt"
    then
    	rm filles.txt
    	touch filles.txt
    fi
    if test -f "./garcons.txt"
    then
    	rm garcons.txt
    	touch garcons.txt
    fi
     
    while read nom sexe
    do
    	case $sexe in
    	f ) echo -e "$nom\n" >> filles.txt ;;
    	m ) echo -e "$nom\n"  >> garcons.txt ;;
    	esac
    done < personnes.txt
    référence : Introduction à la programmation en Bash d'Eric Sanchis


    Pour la commande
    Cela fonctionne très bien directement dans le shell, mais dans ce programme écrit dans un fichier, ça ne fonctionne plus. Tous mes noms se retrouvent collés sans espace dans les fichiers de sortie filles.txt et garcons.txt ).

    Pourriez-vous m'aider ?

    D'avance merci.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 358
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 358
    Par défaut
    Bonjour,

    N'est-ce pas plutôt l'éditeur de texte utilisé pour regarder les fichiers résultats qui serait en cause ?
    Par exemple, notepad n’interprétera pas les simples "\n", pour lui se sera plutôt "\r\n".

  3. #3
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Merci pour ta réponse. J'utilise Scite et pour Perl, \n fonctionne très bien ... cela peut-il varier, sur le même éditeur, selon le langage utilisé ?
    Par acquis de conscience, je vais tester sur un autre éditeur.

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Alors, j'ai essayé avec NotePad, la sortie est identique. J'utilise Cygwin.
    Précision : j'ai parametré Scite afin que les terminateurs de lignes soient LF et tous mes autres scripts fonctionnent très bien.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    pour vérifier le formatage des fichiers, fais-en un cat avant la fin de ton script.

    l'écriture d'une sortie formatée devrait séparer les données du format.
    pour cela, on préfère utiliser printf :utilise une boucle pour "factoriser" tes tests d'existence de fichiers.

    plutôt que d'écrire pour chaque cas, définis le fichier de destination, puis écris.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case genre in m) out=gars;; f) out=filles;; esac; printf '%s\n\n' "$nom" >>"$out"
    y a pas des outils pour éditer des fichiers dans cygwin, genre nano, vim... ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 358
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 358
    Par défaut
    En plus des conseils de N_BaH, comme je le disais dans mon précédent post, notepad n'est pas fait pour lire ce genre de fichier, il lui faut "\r\n".

    Après je mets en doute ton éditeur car tu dis que tous les noms dans les fichiers ne sont pas à la ligne et sont collés les uns derrière les autres.

    Est-ce vraiment le cas ou bien sont-ils, en fait, séparés par le caractère "n", ce qui serait le cas si echo -e n'interprétait pas le "\n" correctement ?

  7. #7
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #!/bin/bash
    # @(#) tripersonnes
     
    if test -f "./filles.txt"
    then
    	rm filles.txt
    	touch filles.txt
    fi
    if test -f "./gars.txt"
    then
    	rm gars.txt
    	touch gars.txt
    fi
     
     
    while read nom sexe
    do
    	case $sexe in
    		m) out=gars.txt;; 
    		f) out=filles.txt;; 
    	esac; 
     
    	printf '%s\n\n' "$nom" >>"$out"
     
    done < personnes.txt
     
    cat filles.txt
    Merci à vous tous. C'était NotePad le problème et dans tous les cas, il ignore les sauts de lignes. Les \n sont pourtant les mêmes sous Windows et Linux, non ? Si j'ouvre avec Wordpad, le formatage est correct. C'est vraiment, comment perdre du temps pour une connerie, comme c'est parfois le cas en info. Mais, cela m'a permis d'apprendre plusieurs choses, et c'est mon but, donc encore merci.

    Je n'ai pas compris pourquoi créer $out, quel en est l'avantage.

    Oui, j'ai installé vi, mais ça semble compliqué à utiliser et je me demande si c'est vraiment nécessaire pour le peu d'utilisation que je vais en avoir.

    Cette ligne "# @(#) tripersonnes" ... est-ce simplement un commentaire indiquant le titre, où a-t'elle une autre utilité ?

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 135
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 135
    Par défaut
    Salut,

    fonctionne très bien chez moi (linux pur, visualisation avec leafpad en graphique ou cat dans une console) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # cat filles.txt 
    dominique
     
    paule
     
    sylvie
     
    #

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] echo et pause ne fonctionne pas dans mon batch
    Par pol2095 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 09/07/2013, 17h58
  2. [Batch] @echo off ne fonctionne pas
    Par makiavel7 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 12/02/2013, 09h42
  3. [PowerShell] Commande ECHO ne fonctionne pas en tâche planifiée
    Par RedFish64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 30/11/2012, 16h54
  4. Javascript dans un echo PHP de fonctionne pas
    Par Ed la poignee dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2009, 16h31
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo