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 :

[debutant] Split d'une chaine dans un tableau


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 14
    Points : 17
    Points
    17
    Par défaut [debutant] Split d'une chaine dans un tableau
    bonjour,

    Je bloque sur le split d'une chaine dans un tableau.
    J'ai essayé différentes syntaxes basiques, mais je rencontre à chaque fois l'erreur suivante Syntax error: ")" unexpected

    1er test (dans un script)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #!/bin/bash
    str="abc def ghi"
    arr=($(echo $str | tr " " "\n"))
    echo ${arr[1]}
    exit 0
    2e test (dans un script), exemple repris depuis initialiser un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!/bin/bash
    declare -a tab=(1 5 9 77 66 55 12)
    echo ${tab[0]}
    echo ${tab[1]}
    $ind=5
    echo ${tab[$ind]} #-- Utilisation de la variable "ind" comme indice
    echo ${tab[*]}   #-- Affichage du tableau
    echo ${#tab[*]} #-- Affichage du nombre d'elements dans le tableau
    3e test
    si je lance les commandes du 1er test directement dans un shell, ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    str="abc def ghi" ; arr=($(echo $str | tr " " "\n")) ; echo ${arr[1]}
    Ce problème est peut-être basique, mais est-ce que quelqu'un a une idée pourquoi la conversion ne fonctionne pas dans un script bash,
    alors que ça passe correctement dans un terminal ?

    d'avance merci

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 311
    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 311
    Points : 12 830
    Points
    12 830
    Par défaut
    Bonjour,

    La syntaxe en bash peut-être simplifiée comme ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ str="abc def ghi"
    $ arr=( $str )
    $ echo ${arr[1]}
    def
    $ echo ${arr[0]}
    abc
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ arr=( foo bar foobar )
    $ echo ${arr[0]}
    foo
    $ echo ${arr[1]}
    bar
    Attention à respecter les espaces sur les parenthèses...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    Bonjour,

    es-tu certain d'utiliser bash ?
    comment exécutes-tu ton script ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 14
    Points : 17
    Points
    17

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    voilà, voilà ! le mystère est résolu.
    sh est généralement un lien vers un shell plus POSIX que bash, qui ne supporte pas les tableaux.

    un script doit être exécutable, et appelé avec son chemin (relatif, ou absolu) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chmod +x monScript
    ./monScript #si le script est dans le répertoire courant, ou
    /chemin/absolu/monScript
    le shebang sera utilisé pour déterminer le shell qui exécutera le script; s'il n'y a pas de shebang, alors ce sera le shell par défaut de l'utilisateur.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    ça va tout de suite mieux,
    merci pour votre aide

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

Discussions similaires

  1. [debutant] Eclater une chaine dans un tableau
    Par Picho dans le forum Cobol
    Réponses: 2
    Dernier message: 21/03/2011, 13h01
  2. Couper une chaine dans un tableau
    Par Z-fly dans le forum Réseau
    Réponses: 5
    Dernier message: 06/07/2008, 22h31
  3. Réponses: 10
    Dernier message: 05/01/2008, 12h59
  4. Lettres d'une chaine dans un tableau
    Par Girzi dans le forum Langage
    Réponses: 2
    Dernier message: 07/07/2006, 10h36
  5. [Tableaux] Recherche d'une chaine dans un tableau
    Par tom06440 dans le forum Langage
    Réponses: 5
    Dernier message: 21/10/2005, 00h27

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