Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shells:tableaux [05/01/2015 05:53] smolski créée |
doc:programmation:shells:tableaux [20/10/2015 17:49] milou [Ajout suppression] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== script bash : les tableaux ====== | + | ====== script bash : Tableaux ====== |
- | * Niveau requis : {{tag>débutant}} | + | * Objet : script bash : Tableaux |
+ | * Niveau requis : {{tag>débutant avisé}} | ||
+ | * Commentaires : FIXME | ||
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
- | * Suivi : {{tag>à-placer}} | + | * Suivi : |
- | * Création par [[user>Hypathie]] 18/03/2014 | + | * Création par [[user>Hypathie]] le 18/03/2014 |
- | * Testé par <Hypathie> le <Juin 2014> | + | * Testé par [[user>Hypathie]] Juin 2014 |
- | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=92203#p92203 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | + | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=9181 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) |
+ | |||
+ | |||
+ | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
+ | |||
+ | ------ | ||
**Nota : Les autres wiki :** | **Nota : Les autres wiki :** | ||
- | * [[atelier:chantier:debuter-avec-les-scripts-shell-bash]] | + | * [[doc:programmation:shells:debuter-avec-les-scripts-shell-bash]] |
- | * [[atelier:chantier:script-bash-variables-arguments-parametres|script-bash-variables-arguments-parametres]] | + | * [[doc:programmation:shells:script-bash-variables-arguments-parametres|script-bash-variables-arguments-parametres]] |
- | * [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles|modification de variable et de paramètre]] | + | * [[doc:programmation:shells:script-bash-detail-sur-les-parametres-et-les-boucles|modification de variable et de paramètre]] |
- | * [[atelier:chantier:script-bash-enchainement-de-commandes-et-etat-de-sortie|script-bash-enchainement-de-commandes-et-etat-de-sortie]] | + | * [[doc:programmation:shells:script-bash-enchainement-de-commandes-et-etat-de-sortie|script-bash-enchainement-de-commandes-et-etat-de-sortie]] |
- | * [[atelier:chantier:script-bash-etat-de-sorie-et-les-tests|script-bash-etat-de-sorie-et-les-tests]] | + | * [[doc:programmation:shells:script-bash-etat-de-sorie-et-les-tests|script-bash-etat-de-sortie-et-les-tests]] |
* ;-) | * ;-) | ||
- | * [[atelier:chantier:script-bash-les-fonctions|script-bash-les-fonctions]] | + | * [[doc:programmation:bash:script:fonction|script-bash-les-fonctions]] |
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
- | ===== Utiliser des tableaux===== | + | ===== Utiliser des tableaux ===== |
<note important> | <note important> | ||
Les tableaux ne sont pas spécifiés par POSIX.\\ | Les tableaux ne sont pas spécifiés par POSIX.\\ | ||
- | Tableaux indexés unidimensionnels sont pris en charge en utilisant la syntaxe et la sémantique similaire par la plupart des shells comme Korn.\\ | + | Les tableaux indexés unidimensionnels sont pris en charge en utilisant la syntaxe et la sémantique similaire à la plupart des shells comme Korn.\\ |
Pour plus détails voir : [[http://wiki.bash-hackers.org/syntax/arrays]] | Pour plus détails voir : [[http://wiki.bash-hackers.org/syntax/arrays]] | ||
</note> | </note> | ||
- | ====Définitions ==== | + | |
+ | ==== Définitions ==== | ||
- Un tableau est une variable contenant d'autres variables rangée en mémoire les unes à la suite des autres. | - Un tableau est une variable contenant d'autres variables rangée en mémoire les unes à la suite des autres. | ||
- Un tableau est unidimensionnel. | - Un tableau est unidimensionnel. | ||
Ligne 35: | Ligne 44: | ||
>Les cases d'un tableau peuvent ne pas être consécutives. | >Les cases d'un tableau peuvent ne pas être consécutives. | ||
- | ====Quatre méthodes pour créer un tableau==== | + | ==== Quatre méthodes pour créer un tableau ==== |
* Avec la commande ''declare'' et l'option ''-a'' : | * Avec la commande ''declare'' et l'option ''-a'' : | ||
Ligne 57: | Ligne 66: | ||
read -a nom-tableau | read -a nom-tableau | ||
- | ===Exemple=== | + | === Exemple === |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 77: | Ligne 87: | ||
./mon-script | ./mon-script | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
2 3 6 | 2 3 6 | ||
0 1 2 | 0 1 2 | ||
Ligne 83: | Ligne 93: | ||
nom nom nom nom nom | nom nom nom nom nom | ||
0 1 2 3 4 | 0 1 2 3 4 | ||
- | </code> | + | </file> |
>''2 3 6'' : la première valeur a l'indice 2 ; la deuxième a l'indice 3 ; la troisième a l'indice 6. | >''2 3 6'' : la première valeur a l'indice 2 ; la deuxième a l'indice 3 ; la troisième a l'indice 6. | ||
+ | > | ||
>''0 1 2'' : Il y a une valeur dans les cases d'indice 0, d'indice 1, d'indice 2. | >''0 1 2'' : Il y a une valeur dans les cases d'indice 0, d'indice 1, d'indice 2. | ||
+ | > | ||
>''0 1 2'' : idem | >''0 1 2'' : idem | ||
- | >''0 1 2 3 4'' : Sans indice donné manuellement, les indices attribués aux valeurs\\ suivent l'ordre des entiers naturels en __commençant à zéro__. | + | > |
+ | >''0 1 2 3 4'' : Sans indice donné manuellement, les indices attribués aux valeurs suivent l'ordre des entiers naturels en __commençant à zéro__. | ||
+ | |||
+ | ==== Récupération de valeur(s) ==== | ||
- | + | === Valeur d'une case === | |
- | ====Récupération de valeur(s)==== | + | |
- | ===Récupération de la valeur d'une case=== | + | |
${nom-tableau[indice]} | ${nom-tableau[indice]} | ||
- | ===Récupérer les valeurs de toutes les cases=== | + | === Valeurs de toutes les cases === |
Tous les éléments d'un tableau sont accessibles avec chacune de ces deux syntaxes : | Tous les éléments d'un tableau sont accessibles avec chacune de ces deux syntaxes : | ||
Ligne 102: | Ligne 116: | ||
${nom-tableau[@]} | ${nom-tableau[@]} | ||
- | ===Récupérer le nombre d'éléments d'un tableau=== | + | === Nombre d'éléments d'un tableau === |
- | Le nombre d'éléments d'un tableau est accessible chacune de ces deux syntaxes : | + | |
+ | Le nombre d'éléments d'un tableau est accessible par chacune de ces deux syntaxes : | ||
${#nomtableau[*]} | ${#nomtableau[*]} | ||
Ligne 109: | Ligne 124: | ||
${#nomtableau[@]} | ${#nomtableau[@]} | ||
- | ===Récupérer le n° des cases utilisées=== | + | === n° des cases utilisées === |
Il est possible de récupérer le numéro des cases qui ont été utilisées dans un tableau,\\ | Il est possible de récupérer le numéro des cases qui ont été utilisées dans un tableau,\\ | ||
Pour ce faire, la syntaxe est : | Pour ce faire, la syntaxe est : | ||
Ligne 115: | Ligne 131: | ||
${!nom-tableau[*]} | ${!nom-tableau[*]} | ||
- | ===Concaténer deux tableaux en un seul=== | + | === Concaténer deux tableaux en un seul === |
Concaténer dans un seul tableau nouvellement initialisé les cases de tableaux existants : | Concaténer dans un seul tableau nouvellement initialisé les cases de tableaux existants : | ||
Ligne 122: | Ligne 138: | ||
- | =====Voici un script qui utilise tout cela===== | + | ===== Exemple ===== |
<code bash> | <code bash> | ||
Ligne 157: | Ligne 173: | ||
</code> | </code> | ||
+ | ===== Nombres entiers ===== | ||
- | |||
- | =====2)Tableau et nombres entiers===== | ||
Si l'on souhaite créer un tableau d'entiers, on utilise la commande ''declare'' avec l'option ''-ai''.\\ | Si l'on souhaite créer un tableau d'entiers, on utilise la commande ''declare'' avec l'option ''-ai''.\\ | ||
(l'ordre des options n'a pas d'importance.) | (l'ordre des options n'a pas d'importance.) | ||
Ligne 174: | Ligne 189: | ||
echo ${t[@]} | echo ${t[@]} | ||
</code> | </code> | ||
+ | |||
<code user> | <code user> | ||
./mon-script | ./mon-script | ||
</code> | </code> | ||
- | <code> | + | |
+ | <file config retour de la commande> | ||
18 2 -2 | 18 2 -2 | ||
2 4 6 | 2 4 6 | ||
Ligne 183: | Ligne 200: | ||
5 6 7 8 9 | 5 6 7 8 9 | ||
5 6 7 8 9 | 5 6 7 8 9 | ||
- | </code> | + | </file> |
- | =====3) Ajout, suppression dans les tableaux===== | + | |
+ | ===== Ajout suppression ===== | ||
* Pour ajouter un élément à un tableau : ''tableau[${#tableau[*]}]=element'' | * Pour ajouter un élément à un tableau : ''tableau[${#tableau[*]}]=element'' | ||
<code bash> | <code bash> | ||
Ligne 193: | Ligne 212: | ||
echo ${tableau[*]} | echo ${tableau[*]} | ||
</code> | </code> | ||
+ | |||
<code> | <code> | ||
3 | 3 | ||
Ligne 212: | Ligne 232: | ||
colorless noir blanc | colorless noir blanc | ||
</code> | </code> | ||
+ | |||
* pour supprimer un tableau : ''unset nom-tableau'' | * pour supprimer un tableau : ''unset nom-tableau'' | ||
+ | |||
* pour supprimer la case d'un tableau : ''unset nom-tableau[indice] ...'' | * pour supprimer la case d'un tableau : ''unset nom-tableau[indice] ...'' | ||
- | =====4) Un tableau associatif===== | + | ===== Tableau associatif ===== |
Un tableau associatif est un tableau uni-dimentionnel à ceci près que les index sont des chaînes de caractères.\\ | Un tableau associatif est un tableau uni-dimentionnel à ceci près que les index sont des chaînes de caractères.\\ | ||
- | Il en va de même que précédemment :\\ | + | Il en va de même que précédemment : |
* l'indice se récupère ainsi : ''${!tableau[@]}''; | * l'indice se récupère ainsi : ''${!tableau[@]}''; | ||
* la valeur se récupère ainsi : ''${tableau[@]}''; | * la valeur se récupère ainsi : ''${tableau[@]}''; | ||
Ligne 230: | Ligne 253: | ||
done | done | ||
</code> | </code> | ||
+ | |||
<code user> | <code user> | ||
./mon-script | ./mon-script | ||
Ligne 240: | Ligne 264: | ||
le nombre d'élèves est ici la valeur : 30 | le nombre d'élèves est ici la valeur : 30 | ||
</code> | </code> | ||
- | * Il faut utiliser ''@'' (et non ''*'') pour que la boucle permette d'afficher chacune "de toutes" les valeurs. | + | * Il faut utiliser ''@'' (et non ''*'') pour que la boucle permette d'afficher **chacune des valeurs**. |
===== Conclusion ===== | ===== Conclusion ===== | ||
- | ==== Récapitulatif==== | + | ==== Récapitulatif ==== |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 270: | Ligne 294: | ||
</code> | </code> | ||
- | ==== Se creuser un peu les méninges==== | + | ==== Se creuser un peu les méninges ==== |
- | Comparez ses méthodes pour associer à l'affichage, un à un , deux éléments du retours :\\ | + | |
- | * Avec un tableau : | + | Comparez ses méthodes pour associer à l'affichage, un à un , deux éléments du retours : |
- | <code bash> | + | * Avec un tableau :<code bash> |
#!/bin/bash | #!/bin/bash | ||
tableau=([1]=a [2]=b [3]=c) | tableau=([1]=a [2]=b [3]=c) | ||
Ligne 292: | Ligne 316: | ||
**Merci à enikar pour ce script et cette réflexion sur IRC** 8-) | **Merci à enikar pour ce script et cette réflexion sur IRC** 8-) | ||
- | Mais aussi, après avoir vu [[atelier:chantier:script-bash-les-fonctions|les fonctions]] avec le script de captnfab : [[doc:programmation:shell:avancee#les-fonctions|Fonctionnalités avancées du Shell: Les fonctions]] | + | Mais aussi, après avoir vu [[doc:programmation:bash:script:fonction|script-bash-les-fonctions]] avec le script de captnfab : [[doc:programmation:shell:avancee#les-fonctions|Fonctionnalités avancées du Shell: Les fonctions]] |
==== Une astuce ==== | ==== Une astuce ==== | ||
Ligne 314: | Ligne 339: | ||
===== La suite c'est ici ===== | ===== La suite c'est ici ===== | ||
- | [[atelier:chantier:script-bash-les-fonctions|script-bash-les-fonctions]] | + | * [[doc:programmation:bash:script:fonction|script-bash-les-fonctions]] |