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 -
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
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
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:
- Script Bash
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Bingo bash - Télécharger - Divers Jeux
- Bash addition ✓ - Forum Shell
1 réponse
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é) :
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 :
;-))
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 $
;-))
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 ?^^
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".
;-))