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 26/11/2010, 13h35   #1
Invité de passage
 
Lea Minet
Inscription : novembre 2010
Messages : 2
Détails du profil
Informations personnelles :
Nom : Lea Minet

Informations forums :
Inscription : novembre 2010
Messages : 2
Points : 1
Points : 1
Par défaut Shell : incrémentation des valeurs d'un tableau

Bonjour!

je souhaiterais faire une boucle while qui récupère des valeurs entières sur l'entrée standard avec et les met dans un tableau.
Le but étant de stocker le nombre d'apparition d'un entier lors de la saisie en tant que valeur du tableau dont l'indice correspondra à sa valeur.
Ce qui donne à mon sens :
Code :
1
2
3
4
#!/bin/sh
while read ligne; do
    tab[$ligne]=$((${tab[$ligne]}+1
done
Le soucis c'est que lors de l'exécution j'obtiens une erreur : Bad Substitution
Comment dois-je m'y prendre pour incrémenter la valeur d'un tableau ?
mimilay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 13h41   #2
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Un façon parmi d'autres
Code :
1
2
 
let tab[$ligne]=${tab[$ligne]}+1
becket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/11/2010, 14h46   #3
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 059
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 059
Points : 4 115
Points : 4 115
Il n'y a pas de tableaux en sh.

Passe à Bash ou un autre shell qui les supporte
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/11/2010, 15h16   #4
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Code :
1
2
3
 
[becket@zen /]$ ls -la /bin/sh
lrwxrwxrwx. 1 root root 4 Nov 22 21:43 /bin/sh -> bash
becket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/11/2010, 15h24   #5
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 972
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 972
Points : 5 939
Points : 5 939
Salut.

Citation:
Envoyé par becket Voir le message
Code :
1
2
3
 
[becket@zen /]$ ls -la /bin/sh
lrwxrwxrwx. 1 root root 4 Nov 22 21:43 /bin/sh -> bash
Mieux vaut utiliser #!/bin/bash pour bash pour que ça reste "portable" au maximum (car ça dépend de la distribution). Par exemple sous Ubuntu & co :

Code :
1
2
idriss@precario-c700:~$ ls -la /bin/sh
lrwxrwxrwx 1 root root 4 2010-01-18 18:53 /bin/sh -> dash
et dash (tout comme le sh d'origine), ne gère pas les tableaux.

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 15h47   #6
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Je pense que j'ai mal été compris, mon message avait pour but de souligner que le /bin/sh est un bash et pas un /bin/sh. Le message d'erreur de départ ne laisse pas vraiment de doutes à ce propos.
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 16h14   #7
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
Citation:
Envoyé par N_BaH Voir le message
Il n'y a pas de tableaux en sh.

Passe à Bash ou un autre shell qui les supporte
non il n'y a pas de tableau en sh, mais il est possible de palier à ce défaut avec eval :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
echo "nombre de donnees a lire ?"
read nbElt
i=0
while [ $i -le $nbElt ]
do
  echo "lecture de la donnee $i?"
  eval read a$i
  i=`expr $i + 1`
done
 
i=0
while [ $i -le $nbElt ]
do
  eval echo "donnee a${i} = \${a${i}}"
  # ou eval echo "donnee a$i = \$a$i"
  i=`expr $i + 1`
done
merci eval

Citation:
Envoyé par becket Voir le message
Je pense que j'ai mal été compris, mon message avait pour but de souligner que le /bin/sh est un bash et pas un /bin/sh. Le message d'erreur de départ ne laisse pas vraiment de doutes à ce propos.
Au risque d'être hors sujet sur un post lié à linux : Oui sous linux sh est emulé par bash.
Sous d'autres unix il peut s'agir d'une implémentation réelle (je pense notamment à solaris)

Citation:
ls -alrt /usr/bin/sh
lrwxrwxrwx 1 root root 13 Aug 26 2007 /usr/bin/sh -> ../../sbin/sh
ls -alrt /sbin/sh
-r-xr-xr-x 1 root root 95488 Oct 18 2006 /sbin/sh
Ceci dit pour des problèmes de portabilité revenir à un shell plus basique comme sh peut être intéressant.
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/11/2010, 16h26   #8
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 972
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 972
Points : 5 939
Points : 5 939
Citation:
Envoyé par jabbounet Voir le message
Oui sous linux sh est emulé par bash.
Et encore, cela dépend des distributions (cf : mon post précédant).

Citation:
Envoyé par jabbounet Voir le message
Ceci dit pour des problèmes de portabilité revenir à un shell plus basique comme sh peut être intéressant.
Par rapport à d'autres shell exotiques oui (comme le Zsh par exemple) ... mais Bash est devenu, comment dire, "standardisé" (il est très souvent présent : je l'ai vu sous BSD, Solaris et même mac OS) et il supporte les codes sh et ksh. Bash est donc aussi une solution de portabilité je pense.

@ mimilay : le problème est-il ?

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2010, 13h09   #9
Invité de passage
 
Lea Minet
Inscription : novembre 2010
Messages : 2
Détails du profil
Informations personnelles :
Nom : Lea Minet

Informations forums :
Inscription : novembre 2010
Messages : 2
Points : 1
Points : 1
à ok.Idriss : Le problème est bel et bien résolu !

Merci à tous pour la solution
mimilay 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 20h48.


 
 
 
 
Partenaires

Hébergement Web