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 :

Comment gérer les espaces avec une boucle case sur sh ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 53
    Par défaut Comment gérer les espaces avec une boucle case sur sh ?
    Bonjour,
    J'ai quelque problème à avoir un chemin qui rentre dans une boucle case car il y a des espaces et ils ne sont pas pris en comptes.

    Je poste mon code pour que le comprenne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    arg=$*
    echo $arg
    while [ $# -gt 0 ];
    do
      case $1 in
        *.pdf|^*[:space:]*.pdf)echo "match: $1";pdflist="$pdflist$1 ";shift;;
        -V|--version)echo "   Version: $VERSION";exit 0;;
        -h|--help)usage;exit 1;;
        -|--*|*)usage;exit 1;;
       esac
    done
    Il arrive a avoir les fichiers pdf sans espaces mais pas avec espace.

    Cordialement merci pour votre aide.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 364
    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 364
    Par défaut
    Bonjour,

    Comment appelles-tu ton bout de code ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 666
    Par défaut
    [[:space:]] !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 53
    Par défaut
    Merci pour vos réponses,

    Je l'appelle avec la commande:

    [[:space:]]
    J'ai essayé mais il ne m'affiche rien avec ma variable $1.

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 364
    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 364
    Par défaut
    Alors essaye avec les modifications suivantes (en rouge) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *.pdf)echo "match: $1";pdflist="$pdflist$1 ";shift;;
    Et lors de l'appel:
    PS: N_BaH à raison, la syntaxe est bien [[:space:]] et non [:space:], mais pour moi, tu n'en as pas besoin...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 53
    Par défaut
    Bonjour disedorgue,

    J'ai essayé avec tes modifications mais j'ai le même résultat.

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

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

    j'ai trouvé un truc intéressant, là (2e page), que j'ai mis en application comme ça, et qui fonctionne si je lui passe un paramètre avec espace. Pas creusé plus loin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
     
    if [ -z "$1" ]; then echo "usage :" $0 "paramètre"; exit; fi
     
    Arguments=( "$@" )
    echo "${Arguments[@]}"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # ./test.sh Desktop/graphisme vrac/
    Desktop/graphisme vrac/

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 53
    Par défaut
    Rebonjour,

    l'accent circonflexe appartient à la syntaxe des regex, pas aux globs du shell.
    J'ai corrigé sans résultat.

    Jipété je pense pas que ça soit adaptable avec case enfin peut être que je me trompe.

    Je post les sorties que j'ai avec mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ./pdf.sh a.pdf b.pdf c.pdf z.pdf
    a.pdf b.pdf c.pdf z.pdf
    match: a.pdf
    match: b.pdf
    match: c.pdf
    match: z.pdf
    yes: a.pdf
    yes: b.pdf
    yes: c.pdf
    no: z.pdf
    et

    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
    ./pdf.sh a.pdf b.pdf c.pdf z.pdf a\ b.pdf a\ b/a.pdf a\ b/a\ b.pdf
    a.pdf b.pdf c.pdf z.pdf a b.pdf a b/a.pdf a b/a b.pdf
    match: a.pdf
    match: b.pdf
    match: c.pdf
    match: z.pdf
    pdf.sh 0.1
      Usage: pdf.sh [option] files.pdf
      Options :
    	-h | --help		Help
    	-i | --interactive	Interactive
    	-l | --log		Log
    	-q | --quiet		Quiet
    	-v | --verbose		Verbose
    	-V | --version		Version
    	-d | --debug		Debug
    Est il possible de modifier shift pour qu'il ne prenne pas en compte les espaces?

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 148
    Par défaut
    Citation Envoyé par bolivari Voir le message
    Jipété je pense pas que ça soit adaptable avec case enfin peutêtre que je me trompe.
    Avec un trait d'union (elle sert à quoi ma signature, sinon ?), il faut tester, peutêtre que c'est bon.

    En tout cas, je viens de refaire un test avec juste un fichier (pas que ça à faire) et ça fonctionne, sans slash rajouté ou quoi ou qu'est-ce, rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # ./param_with_spaces.sh Desktop/notes papier.txt
    Desktop/notes papier.txt
    Citation Envoyé par bolivari Voir le message
    Je post les sorties que j'ai avec mon script:
    Je postEUH, du verbe poster, exactement comme j'aimEUH, je chantEUH, 'tain, c'est terrible...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 53
    Par défaut
    Jipété désolé pour les fautes d'orthographe je ne me suis pas relus.

    Pour ce qui est des variables $* me renvois bien les valeurs avec des espaces donc je pense que c'est juste qu'il ne passe pas dans le case car il découpe les espaces.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 148
    Par défaut
    Citation Envoyé par bolivari Voir le message
    Pour ce qui est des variables $* me renvois bien les valeurs avec des espaces donc je pense que c'est juste qu'il ne passe pas dans le case car il découpe les espaces.
    Pourtant la solution était en page 1 du lien que j'ai donné...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    if [ -z "$1" ]; then echo "usage :" $0 "paramètre"; exit; fi
     
    Arguments=( "$@" )
    for index in "${Arguments[@]}"
    do
        echo $index
    done
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # ~/param_with_spaces.sh "avec espace" "avec espace2" "avec espace 3"
    avec espace
    avec espace2
    avec espace 3

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/07/2006, 10h18
  2. [VB6]Gérer les espaces dans une command FTP
    Par ShortcutZ dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/07/2006, 21h28
  3. [DAO] Comment gérer les liens avec la bdd dans mes classes?
    Par Wormus dans le forum Autres
    Réponses: 6
    Dernier message: 22/02/2006, 16h14
  4. [C#/SQL] Comment gérer les exceptions d'une Procédure stockée ?
    Par thomas_strass dans le forum Accès aux données
    Réponses: 10
    Dernier message: 06/07/2005, 10h40
  5. Comment gérer les espaces blancs?
    Par Lambo dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/05/2003, 09h44

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