Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/10/2007, 16h09   #1
Membre du Club
 
Inscription : juin 2006
Messages : 206
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 206
Points : 47
Points : 47
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 :
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 :
tableau =(['a']="une phrase a" ['b']="une phrase b")
Bien entendu, ca ne marche pas, comment puis je m'y prendre

Merci d'avance
crazykangourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2007, 22h27   #2
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Je connais 2 façons d'initialiser un tableau :

en ksh :
Code :
1
2
3
4
5
 
#!/bin/ksh
set -A tableau un deux trois quatre cinq
index=0
echo ${tableau[$index]}
en bash :
Code :
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 :
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 :
1
2
3
4
5
6
 
*** clé "a" inconnue dans le Tableau
+ libellé h : 17
+ libellé b : 15
+ libellé d : 
+ libellé f :
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2007, 08h47   #3
Membre du Club
 
Inscription : juin 2006
Messages : 206
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 206
Points : 47
Points : 47
Je suis désolé d'insisté, mais chez moi ca ne marche pas

Code :
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 :
test.sh: 2: Syntax error: "(" unexpected
C'est quoi cette histoire, je suis sous ubuntu feisty...
crazykangourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2007, 09h01   #4
Membre du Club
 
Inscription : juin 2006
Messages : 206
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 206
Points : 47
Points : 47
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
crazykangourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2007, 13h34   #5
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 945
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 945
Points : 1 083
Points : 1 083
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...
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2007, 14h07   #6
Membre du Club
 
Inscription : juin 2006
Messages : 206
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 206
Points : 47
Points : 47
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
crazykangourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2007, 14h23   #7
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 945
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 945
Points : 1 083
Points : 1 083
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 ?
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h04.


 
 
 
 
Partenaires

Hébergement Web