Script Bash

Résolu
Lee-San Messages postés 195 Date d'inscription   Statut Membre Dernière intervention   -  
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je réalise actuellement un script pour ajouter plusieurs utilisateurs

Je souhaite déjà voir si dans ma boucle je peux afficher mes utilisateurs un par un (si cela fonctionne ensuite je pourrai facilement les ajouter) Mais j'ai un problème, voici mon script

#!/bin/bash

a=(Breno Solene Durant)

i=0

For i in $a
do

i=$i+1

echo ${a[i]}

done



Voilà c'est un script simple et pourtant en exécution il ne me renvoit que Breno. En gros il ne fais qu'un tour de boucle. Quelqu'un sait ou est le problème ?

Merci d'avance

A voir également:

1 réponse

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Pour voir les erreurs d'un script, le mieux est de l'exécuter en mode débogage, en rajoutant "set -xv" en début de script.

Si on exécute ton script tel quel, voilà ce qu'on obtient (débogage activé) :

$ ./foo.sh 

a=(Breno Solene Durant)
+ a=(Breno Solene Durant)

i=0                             
+ i=0                           
                                
for i in $a                     
do                              
                                
i=$i+1                          
                                
echo ${a[i]}                    
                                
done                            
+ for i in '$a'                 
+ i=Breno+1                     
+ echo Solene
Solene
$

Déjà, incrémenté ta boucle avant même l'affichage du 1er nom, ce n'est pas bon ;-(
Ensuite comme tu le vois, ta variable "$i" sert à la fois pour le compteur de boucle et pour les items du tableau, pas bon ça ;-(

Le plus simple est de passer par une boucle empruntée au langage C :

$ cat foo.sh
#!/bin/bash

#set -xv

a=(Breno Solene Durant)

for ((i = 0; i < ${#a[*]}; i++))

do

echo ${a[i]}

done

$ ./foo.sh 
Breno
Solene
Durant

$

;-))
0
Lee-San Messages postés 195 Date d'inscription   Statut Membre Dernière intervention  
 
ok merci !

Mais je comprend pas pourquoi tu initialise i à 0 dans le "for" et qu'ensuite tu l'incrémente avec i++. Sa veut dire qu'a chaque tour de boucle ton i est égal à 1 ?

Et si j'ai bien compris : i < ${#a[*]} veut dire : "tant que i est inférieur à l'ensemble des arguments du tableau a" ?

a et également a quoi sert le cat foo.sh ?^^
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Mais je comprend pas pourquoi tu initialise i à 0 dans le "for"
Dans un tableau la numérotation démarre à "zéro" (0), le 1er élément étant donc "${a[0]}".

et qu'ensuite tu l'incrémente avec i++. Sa veut dire qu'a chaque tour de boucle ton i est égal à 1 ?
Non à chaque tour mon "$i" est égal à la valeur précédente de $i + 1
i=0
i=0+1 => 1
i=1+1 => 2
i=2+1 => 3 (là on s'arrête vu que la valeur est plus grande...)


Et si j'ai bien compris : i < ${#a[*]} veut dire : "tant que i est inférieur à l'ensemble des arguments du tableau a" ?
Oui.


a et également a quoi sert le cat foo.sh ?^^
La commande "cat" sert à afficher le contenu d'un fichier (texte en général), c'était juste pour te montrer le contenu du script qui s'appelle "foo.sh".

;-))
0