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 :

Gérer les paramètres contenant un, ou des espaces


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut Gérer les paramètres contenant un, ou des espaces
    Bonjour,

    J'ai un script "global" qui contient des sous-scripts :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
     
    ##########   Script : scriptGlobal.sh                        ##########
     
    ./p1union.sh  "~/Téléchargements/Valorisation intraday 20220000001.csv"     #ne marche pas !
    ./p1union.sh  ~/Téléchargements/Valorisation\ intraday\ 20220000002.csv     #ne marche pas non plus !
    Le compte-rendu terminal donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cat: '~/Téléchargements/Valorisation': Aucun fichier ou dossier de ce type
    cat: intraday: Aucun fichier ou dossier de ce type
    cat: 20220000001.csv: Aucun fichier ou dossier de ce type
    cat: /home/thierry/Téléchargements/Valorisation: Aucun fichier ou dossier de ce type
    cat: intraday: Aucun fichier ou dossier de ce type
    cat: 20220000002.csv: Aucun fichier ou dossier de ce type

    ¿ Comment faire pour prendre en paramètre les fichier de type : "Valorisation intraday 2022000000x.csv" ?

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 354
    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 354
    Par défaut
    C'est plus le contenu du script qui nous interresse ici ...

    En gros, tu dois avoir un truc du genre cat $1 au lieu de cat "$1" .

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 663
    Par défaut
    en effet.

    pour expliquer le comportement du premier appel, sache que le tilde (~) n'est pas développé entre guillemets, il est donc transmis et utilisé tel quel par le script appelé.

    20220000002 n'y aurait-il pas un zéro de trop ?
    il ne serait pas superflu de systématiquement tester sur l'existence des fichiers utilisés...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 839
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Pour compléter la réponse de disedorgue, qui me semble très proche de la solution, il faut aussi regarder si le script en question traite ses arguments via "$*" ou "$@". Parce que c'est assez subtil mais si on appelle le script en lui passant "toto titi tata", alors $* contient "toto titi tata" (une grosse string) tandis que $@ contiendra, lui, "toto" "titi" "tata" (autant de strings individuelles).
    Exemple 1
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    for x in $*; do
    	echo "via *=[$x]"
    done
    for x in $@; do
    	echo "via @=[$x]"
    done
    On l'appelle en lui passant "a b c" "d e f" (littéralement, avec les guillemets) et ça ressort, pour les deux boucles, chaque lettre prise individuellement (les chaines ne sont pas prises en considération)

    Exemple 2
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    for x in "$*"; do
    	echo "via *=[$x]"
    done
    for x in "$@"; do
    	echo "via @=[$x]"
    done
    Pareil, on l'appelle en lui passant "a b c" "d e f" et ça ressort, pour la première boucle, "a b c d e f" (tant pis si on voulait les deux strings) tandis que pour la seconde boucle ça ressort parfaitement "a b c" puis "d e f".

    Plus le tilde qui effectivement n'est pas traduit quand on le place entre guillemets (dans les guillemets, seuls sont traduits le dollar et le backslash donc tu peux remplacer "~" par "$HOME", ça ça marchera).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    Effectivement, il vous manque des informations pour pouvoir trouver une solution.

    Ainsi je vais vous donner le début de mes deux scripts:

    1/ Le début du script principal :

    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
    #!/bin/bash
     
    ##########   Script : p0dunion.sh                             ##########
    #                                                                      #
    # Autheur :              Liam                             #
    # Date de creation :     01 juin 2022                                  #
    # Date de modification : 24 juil 2022                                  #
    #                                                                      #
    ########################################################################
    # script (p) général (0) à la demande (d)                              #
    # Valeurs communes parmi les cinq fichiers                             #
    ########################################################################
    #
    #Suppression du fichier cumul de la demande précédente:
    rm f1union_cumul.csv
     
    #création d'un fichier cumul:
    ./p1union.sh  ~/Téléchargements/"Valorisation intraday 20220000001.csv"
     
    ./p1union.sh  ~/Téléchargements/"Valorisation intraday 20220000002.csv"  
     
    ./p1union.sh  ~/Téléchargements/"Valorisation intraday 20220000003.csv"
     
    ./p1union.sh  ~/Téléchargements/"Valorisation_intraday 20220000004.csv" 
     
    ./p1union.sh  ~/Téléchargements/"Valorisation intraday 20220000005.csv" 
     
    ...
    2/ Le début du script secondaire :

    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
    #!/bin/bash                   
     
    ARG1=${1:?"Ce script nécessite 1 argument:  \
    	   Fichier numero 1 : 'Valorisation intraday 20220000001.csv' \
    	   Fichier numero 2 : 'Valorisation intraday 20220000002.csv' \
    	   Fichier numero 3 : 'Valorisation intraday 20220000003.csv' \
    	   Fichier numero 4 : 'Valorisation intraday 20220000004.csv' \
    	   Fichier numero 5 : 'Valorisation intraday 20220000005.csv' "}
     
    ### Script: p1union.sh  $1='Valorisation intraday 2022000000x.csv'  ####
    #
    # Autheur :              Liam
    # Date de creation :     01 Juin  2022
    #
    # . . .
    #
    # le fichier en entrée (arg1) est en codage ISO-8859-1
    # 1/ Modification de caractères : é => e   è => e   à => a   . => (rien)
    #
    #Remarque : ne supprimer que le séparateur des milliers ...
    #Remarque   ... et faire un iconv devrait marcher ...
    #Remarque   ... et on conserverait ainsi les accents !
     
    cat $1 | sed -e 's/\xe9/e/g' \
                 -e 's/\xe8/e/g' \
                 -e 's/\xe0/a/g' \
                 -e 's/\xa0//g'  |
     
             cut -f1-2,5-11 -d";" > ftmp1union1.csv
     
    # 3/ choisir le codage utf-8 :
    # le grep ne marche que avec utf8:
    #
    iconv -f ISO-8859-1 -t UTF-8 ftmp1union1.csv -o ftmp1union2.csv
     
    # 4/ Ajout par gawk :
    # . . .

  6. #6
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    Bravo donc à disedorgue !

    Il fallait remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cat $1 | sed -e 's/\xe9/e/g' \
                 -e 's/\xe8/e/g' \
                 -e 's/\xe0/a/g' \
                 -e 's/\xa0//g'  |
     
             cut -f1-2,5-11 -d";" > ftmp1union1.csv
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cat "$1" | sed -e 's/\xe9/e/g' \
                   -e 's/\xe8/e/g' \
                   -e 's/\xe0/a/g' \
                   -e 's/\xa0//g'  |
     
               cut -f1-2,5-11 -d";" > ftmp1union1.csv

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Citation Envoyé par disedorgue Voir le message
    En gros, tu dois avoir un truc du genre cat $1 au lieu de cat "$1" .
    cat $1 | sed -e ...
    Ce n'est plus de la compétence technique. C'est de la magie noire. Trouver l'erreur exacte sur une commande qui ne devrait pas être, surtout venant d'une internaute habituée de ce forum, c'est époustouflant.

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

Discussions similaires

  1. [Drupal] Gérer les paramètres
    Par s.n.a.f.u dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 01/02/2011, 23h01
  2. Réponses: 7
    Dernier message: 06/05/2010, 17h27
  3. Gérer les paramètres régionaux
    Par nonaparus dans le forum C#
    Réponses: 1
    Dernier message: 21/03/2008, 09h57
  4. Réponses: 7
    Dernier message: 21/12/2007, 12h56
  5. [Excel] Gérer les paramètres d'impression
    Par guidav dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/11/2006, 18h28

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