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.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shells:debuter-avec-les-scripts-shell-bash [03/06/2014 14:17] Hypathie [E ) État de sortie et les tests] |
doc:programmation:shells:debuter-avec-les-scripts-shell-bash [03/06/2014 15:17] Hypathie [H) Les tableaux] |
||
---|---|---|---|
Ligne 572: | Ligne 572: | ||
Dans les tests sur les entiers l'égalité est représentée par l'option -eq ! | Dans les tests sur les entiers l'égalité est représentée par l'option -eq ! | ||
- | ===Avec la structure conditionnelle if === | + | === Avec la structure conditionnelle if sur des valeurs affectés dans le script=== |
**Voir[[doc:programmation:shell:avancee|Fonctionnalités avancées du Shell]] en particulier : [[doc:programmation:shell:avancee#instruction-conditionnelle-if|structure conditionnelle if]] pour ce qui suit** | **Voir[[doc:programmation:shell:avancee|Fonctionnalités avancées du Shell]] en particulier : [[doc:programmation:shell:avancee#instruction-conditionnelle-if|structure conditionnelle if]] pour ce qui suit** | ||
Ligne 596: | Ligne 596: | ||
</code> | </code> | ||
- | ===composition avec les tests et valeur vide, valeur nulle=== | + | ===Composition avec les tests; valeurs (vides ou nulles) déclarées dans le script === |
De même que la composition de commandes vu plus haut, on se sert de la composition avec les tests. Et oui les doubles crochets et la commande test sont des commandes ! LOL | De même que la composition de commandes vu plus haut, on se sert de la composition avec les tests. Et oui les doubles crochets et la commande test sont des commandes ! LOL | ||
Ligne 637: | Ligne 637: | ||
</code> | </code> | ||
- | ===Alternatives : case=== | + | ===Alternatives : case et paramètres passés aux scripts=== |
** Attention case n'utilise pas d'expression régulière mais du "pattern matching"** | ** Attention case n'utilise pas d'expression régulière mais du "pattern matching"** | ||
Ligne 679: | Ligne 679: | ||
Vous avez tout en mains pour comprendre ceci : [[doc:programmation:shell:avancee#selecteur-case|Fonctionnalités avancées du Shell: selecteur-case]] | Vous avez tout en mains pour comprendre ceci : [[doc:programmation:shell:avancee#selecteur-case|Fonctionnalités avancées du Shell: selecteur-case]] | ||
+ | |||
===if et les paramètres passés au script === | ===if et les paramètres passés au script === | ||
Ligne 702: | Ligne 703: | ||
* Voir ce script : [[http://www.quennec.fr/linux/programmation-shell-sous-linux/les-bases-de-la-programmation-shell/ex%C3%A9cution-de-tests/la-5]] | * Voir ce script : [[http://www.quennec.fr/linux/programmation-shell-sous-linux/les-bases-de-la-programmation-shell/ex%C3%A9cution-de-tests/la-5]] | ||
- | + | <note tip> | |
- | **Dans ces deux cas les valeurs des variables que l'on testent, sont choisies depuis l'extérieur du script (le script est un processus fils du shell).**\\ | + | **Avec if + $paramètre ; case ; et l'utilisation de la commande test les valeurs des variables que l'on testent dans le script sont affectées depuis l'extérieur du script. Ce sont les paramètres passés au script avant son exécution**\\ |
- | + | ||
- | **Mais pour modifier la valeur d'une variable par un script (que le script appelle une valeur extérieure**; chaîne de caractère donnée par le terminale, récupération du résultat d'une commande, contenu d'un fichier, etc. **ou que cette variable soit affectée dans le script lui-même) on utilise les boucles.** | + | |
- | =====F ) Valeurs d'une variable internes ou externes à un script===== | + | |
- | + | ||
- | ====Pré-requis: utiliser la structure conditionnelle if==== | + | |
- | À savoir : | + | |
- | * [[atelier:chantier:la-page-man-bash-ii-les-operateurs-lexicographiques|Opérateurs lexicographiques]] | + | |
- | * [[atelier:chantier:page-man-bash-iii-les-operateurs-de-comparaison-numerique|les opérateurs de comparaison numérique]] | + | |
- | ====Exemples :==== | + | |
- | **La valeur (contenu) de la variable1 (var1) et de la variable2 (var2) peuvent être les arguments passés à un script. | + | |
- | Un script peut opérer un test sur les chaînes de caractères passées au script depuis le terminal.** | + | |
- | (Lancez "mon-script" successivement sans argument, puis un, deux trois, etc. arguments.) | + | |
- | <code> | + | |
- | #!/bin/bash | + | |
- | var1=$1 | + | |
- | var2=$2 | + | |
- | echo $1 | + | |
- | echo $2 | + | |
- | if [ $# == 1 ] ; then | + | |
- | echo "ERREUR: vous avez entré $@, mais il faut deux arguments !" | + | |
- | elif [ $# == 2 ] ; then | + | |
- | echo "Les deux arguments que vous avez entré sont $1 et $2" | + | |
- | elif [ $# == 0 ] ; then | + | |
- | echo "ERREUR: vous n'avez pas entré d'arguments, il en faut deux !" | + | |
- | fi | + | |
- | </code> | + | |
- | + | ||
- | **Les chaînes testées par un script peuvent être aussi le contenu d'un fichier.**\\ | + | |
- | + | ||
- | * Voir ce script : [[http://www.quennec.fr/linux/programmation-shell-sous-linux/les-bases-de-la-programmation-shell/ex%C3%A9cution-de-tests/la-5]] | + | |
- | + | ||
- | **Dans ces deux cas les valeurs des variables que l'on testent, sont choisies depuis l'extérieur du script (le script est un processus fils du shell).**\\ | + | |
**Mais pour modifier la valeur d'une variable par un script (que le script appelle une valeur extérieure**; chaîne de caractère donnée par le terminale, récupération du résultat d'une commande, contenu d'un fichier, etc. **ou que cette variable soit affectée dans le script lui-même) on utilise les boucles.** | **Mais pour modifier la valeur d'une variable par un script (que le script appelle une valeur extérieure**; chaîne de caractère donnée par le terminale, récupération du résultat d'une commande, contenu d'un fichier, etc. **ou que cette variable soit affectée dans le script lui-même) on utilise les boucles.** | ||
+ | </note> | ||
- | =====G ) Déclaration nulle et modification par le script d'une valeur interne ou externe===== | + | =====F ) Déclaration nulle et modification par le script d'une valeur interne ou externe===== |
**Pré-requis : utiliser les structures de contrôle** | **Pré-requis : utiliser les structures de contrôle** | ||
Voir : | Voir : | ||
Ligne 794: | Ligne 764: | ||
</code> | </code> | ||
- | =====H ) Déclarer des paramètres de position : set===== | + | =====G ) Déclarer des paramètres de position : set===== |
==== syntaxe de set==== | ==== syntaxe de set==== | ||
À savoir : variables de substitution prédéfinies [[atelier:chantier:bash-les-differents-caracteres-speciaux?&#variables-de-substitution-predefinies-principalement-dans-les-scripts]] | À savoir : variables de substitution prédéfinies [[atelier:chantier:bash-les-differents-caracteres-speciaux?&#variables-de-substitution-predefinies-principalement-dans-les-scripts]] | ||
Ligne 911: | Ligne 881: | ||
</code> | </code> | ||
- | =====I ) Supprimer les paramètres de position===== | + | ====H ) Supprimer les paramètres de position==== |
- | ====Exemple==== | + | ===Exemple=== |
**même script que ci-dessus mais on dé-commente set - - (on enlève # ligne 5) :** | **même script que ci-dessus mais on dé-commente set - - (on enlève # ligne 5) :** | ||
Ligne 1016: | Ligne 986: | ||
Voir le tableau des options ici: http://abs.traduc.org/abs-5.3-fr/ch30.html#optionsref | Voir le tableau des options ici: http://abs.traduc.org/abs-5.3-fr/ch30.html#optionsref | ||
</note> | </note> | ||
+ | =====H) Les tableaux ===== | ||
+ | **Voir : [[atelier:chantier:page-man-bash-v-les-tableaux|shell bash : les tableaux]]** | ||
+ | |||
+ | * **Rappels :** | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | tab=( rouge vert bleu) | ||
+ | echo ${tab[1]} | ||
+ | echo ${tab[@]} | ||
+ | |||
+ | tab[1]="orange" | ||
+ | echo ${tab[1]} | ||
+ | echo ${tab[@]} | ||
+ | |||
+ | echo $tab # $tab est un équivalment de $tab0 : il affichera le première élément | ||
+ | |||
+ | echo ${tab[@]} # affiche tous les éléments de même ${tab[*]} | ||
+ | echo ${#tab[@]} # pour avoir la longueur (nombres d'éléments dans le tableau): ${tab[@]} -1 | ||
+ | (moins un car on commence à zéro! | ||
+ | tab[8]="vert" # nlle affectation sur tab[8] | ||
+ | echo ${!tab[@]} # ! avoir la liste des indices du tableau | ||
+ | echo ${tab[@]} | ||
+ | |||
+ | for i in ${!tab[*]} ; do | ||
+ | echo $i : ${tab[$i]} | ||
+ | done | ||
+ | </code> | ||
+ | |||
+ | * ** Comparez :** | ||
+ | Avec tableau : | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | tableau=([1]=a [2]=b [3]=c) | ||
+ | for var in "${!tableau[@]}" ; do | ||
+ | echo "$var : ${tableau[$var]}" | ||
+ | done | ||
+ | </code> | ||
+ | |||
+ | Le script d'enikar : | ||
+ | |||
+ | <code bash> | ||
+ | set a b c | ||
+ | n=1 | ||
+ | for v in $@ ; do | ||
+ | echo "$n: $v" | ||
+ | let $[ n += 1 ] | ||
+ | done | ||
+ | </code> | ||
+ | **Merci à enikar pour cette réflexion sur IRC** | ||
+ | |||
+ | * astuce : lister avec numérotation tous les fichiers d'un répertoire : | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | directory=(/*) # tableau composé des chemins de les dossiers et fichiers de la racine | ||
+ | |||
+ | for i in ${!directory[@]} ; do | ||
+ | echo "$i : ${directory[$i]}" # là pour afficher tous les éléments du tableau | ||
+ | done | ||
+ | </code> | ||
- | =====J ) Les fonctions===== | + | =====I ) Les fonctions===== |