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 :

initialisation de tableaux et recupération d'un element


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut initialisation de tableaux et recupération d'un element
    Bonjour à tous,

    J'essaie de me former au script shell, mais c'est pas brillant, voici mon script :
    test.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #!/bin/bash
    tableau=( un deux trois quatre cinq cinq )
    echo ${tableau[index]}
    J'ai les erreurs suivantes !!!
    test.sh: 2: Syntax error: "(" unexpected

    J'avais déjà fais crée une discussion similaire (maintenant résolue) et la réponse était :
    Pour initialiser un tableau on fait :
    séparateur espace
    Mais une autre personne a donné le code ci dessus qui ne fonctionne pas...

    En cherchant il y a pas mal de personne qui utilise la première méthode qui me génère une erreur

    Je ne comprends pas....

    J'en profite pour vous poser la question,
    Je souhaiterais aussi initialiser un tableau associatif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau =(['a']="une phrase a" ['b']="une phrase b")
    Bien entendu, ca ne marche pas, comment puis je m'y prendre

    Merci d'avance

  2. #2
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Je connais 2 façons d'initialiser un tableau :

    en ksh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #!/bin/ksh
    set -A tableau un deux trois quatre cinq
    index=0
    echo ${tableau[$index]}
    en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #!/bin/bash
    tableau=(un deux trois quatre cinq)
    index=0
    echo ${tableau[$index]}
    Un tableau associatif en shell ksh ou bash, je ne connais pas.
    Avec awk, c'est possible, exemple :
    http://www.shellunix.com/awk.html

    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
     
    cat >fichier.txt <<EOD
    a:10
    b:10
    h:10
    b:5
    h:7
    EOD
     
    awk -F":" '
    BEGIN {
    Tableau["b"]="libellé b"
    Tableau["d"]="libellé d"
    Tableau["f"]="libellé f"
    Tableau["h"]="libellé h"
    }
    { 
    	if ($1 in Tableau) {
    		Cumul[$1]=Cumul[$1]+$2
    	} else {
    		print "*** clé \""$1"\" inconnue dans le Tableau"
    	}
    }
    END {
    	for (elem in Tableau) {
    		print "+ "Tableau[elem]" : "Cumul[elem]
    	}
    } ' fichier.txt
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    *** clé "a" inconnue dans le Tableau
    + libellé h : 17
    + libellé b : 15
    + libellé d : 
    + libellé f :

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    Je suis désolé d'insisté, mais chez moi ca ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #!/bin/bash
    tableau=(un deux trois quatre cinq)
    index=0
    echo ${tableau[$index]}
    Me génère l'erreur suivante : $ sh test.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test.sh: 2: Syntax error: "(" unexpected
    C'est quoi cette histoire, je suis sous ubuntu feisty...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut Ayé
    J'ai trouvé la solution :
    En mettant que j'étais sous ubuntu, ca ma quand même fait tiqué
    Et j'ai parcouru leur forum et j'ai finalement trouvé que sous ubuntu, sur les nouvelles version si on lance un script en faisant :
    sh test.sh, le shell pris par défaut et dash et non bash
    Donc tout simplement, il faut que je fasse bash test.sh

    Merci de m'avoir lu

  5. #5
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Points : 1 412
    Points
    1 412
    Par défaut
    Si tu mets un she-bang, c'est pour ne pas avoir, par la suite, à préciser explicitement quel shell utiliser ! Donne les droits d'exécution, et exécute ton script normalement.

    C'est pas la première fois que quelqu'un fait ça sur ce forum, et c'est difficile d'aider les personnes : quand je vois dans le she-bang /bin/bash, je suppose que c'est exécuté avec bash...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    LLB
    Je ne comprends pas tout, mais effectivement, c'est pas bien

    Mon script à les droits en exécution, que faut il que je fasse d'autre?
    Comment on fait pour exécuter un script normalement ?
    sh test.sh?

    Merci

  7. #7
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Points : 1 412
    Points
    1 412
    Par défaut
    Comme tout exécutable !
    Pour exécuter "sh", tu tapes "sh". Pour exécuter "test.sh" dans le répertoire courant, tu tapes "./test.sh".

    Autrement, tu n'avais pas l'impression que ton she-bang (#!) ne servait à rien ?

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

Discussions similaires

  1. initialisation de tableaux
    Par takout dans le forum Débuter
    Réponses: 13
    Dernier message: 22/01/2014, 10h30
  2. [CR 9] Initialisation de tableaux avec l'ensemble des enregistrement
    Par linger dans le forum Formules
    Réponses: 8
    Dernier message: 18/06/2009, 21h23
  3. De l'initialisation des tableaux dynamiques de Record
    Par metanil dans le forum Langage
    Réponses: 13
    Dernier message: 03/01/2008, 17h54
  4. [debutant] declaration et initialisation de tableaux
    Par harsh dans le forum Débuter
    Réponses: 12
    Dernier message: 19/03/2005, 00h39
  5. Initialisation de tableaux
    Par bradley vier dans le forum C++
    Réponses: 11
    Dernier message: 02/03/2005, 14h53

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