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:script-bash-variables-arguments-parametres [04/06/2014 20:12] Hypathie [Variables numériques et calculs] |
doc:programmation:shells:script-bash-variables-arguments-parametres [07/07/2014 16:41] Hypathie [Création, suppression, exportation de variables] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
======script bash : variables, arguments, paramètres ====== | ======script bash : variables, arguments, paramètres ====== | ||
- | * Objet : suite du wiki "Apprendre à rédiger des scripts sous bash" | + | * Niveau requis : {{tag>débutant}} |
- | * Niveau requis : {{tag>débutant }} | + | |
- | * Commentaires : //Contexte d'utilisation du sujet du tuto. // 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>en-chantier à-tester à-placer}} - FIXME Pour choisir, voir les autres Tags possibles dans [[:atelier:#tags|l'Atelier]]. | + | * Suivi : {{tag>à-placer}} |
- | * Création par **Hypathie** 03/06/2014 | + | * Création par [[user>Hypathie]] 18/03/2014 |
- | * Testé par <...> le <...> FIXME | + | * Testé par <Hypathie> le <Juin 2014> |
- | * Commentaires sur le forum : [[url | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) FIXME | + | * 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 !)) |
- | **Nota : wiki n°2** | + | |
+ | * [[atelier:chantier:debuter-avec-les-scripts-shell-bash]] | ||
+ | * [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles|script bash : 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]] | ||
+ | * [[atelier:chantier:script-bash-etat-de-sorie-et-les-tests|script-bash-etat-de-sorie-et-les-tests]] | ||
+ | * [[atelier:chantier:script-bash-les-tableaux|script-bash-les-tableaux]] | ||
+ | * [[atelier:chantier:script-bash-les-fonctions|script-bash-les-fonctions]] | ||
Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
Ligne 33: | Ligne 37: | ||
* La déclaration d'une variable se fait lors de son affectation, c'est-à-dire lorsqu'on assigne au nom de la variable une valeur au moyen du caractère = (sans espace avant et après). | * La déclaration d'une variable se fait lors de son affectation, c'est-à-dire lorsqu'on assigne au nom de la variable une valeur au moyen du caractère = (sans espace avant et après). | ||
- | <code> | + | <code bash> |
#!/bin/bash | #!/bin/bash | ||
NomDelaVariable=ValeurDeLaVariable | NomDelaVariable=ValeurDeLaVariable | ||
Ligne 62: | Ligne 66: | ||
echo -e "valeur de var1: $var1\nvaleur de var2: $var2\nvaleur de var3: $var3\nvaleur de var3: $var4\nvaleur de var5: $var5\nvar6: $var6" | echo -e "valeur de var1: $var1\nvaleur de var2: $var2\nvaleur de var3: $var3\nvaleur de var3: $var4\nvaleur de var5: $var5\nvar6: $var6" | ||
</code> | </code> | ||
- | //(1) $0 a pour valeur pré-définie le nom du programme//\\ | + | >(1) $0 a pour valeur pré-définie le nom du programme |
- | + | ||
- | Retour : | + | |
<code> | <code> | ||
Ligne 133: | Ligne 135: | ||
echo "bonjour $prenom !" | echo "bonjour $prenom !" | ||
</code> | </code> | ||
- | Ici "prenom" est le nom de la variable, et sa valeur est entrée par l'utilisateur depuis le terminal.\\ | + | >Ici "prenom" est le nom de la variable, et sa valeur est entrée par l'utilisateur depuis le terminal. |
- | + | >Là aussi ces deux commandes peuvent être entrées dans le terminal. | |
- | (Là aussi ces deux commandes peuvent être entrées dans le terminal.) | + | |
* "read" permet de déclarer plusieurs variables successivement (dans terminal ou script): | * "read" permet de déclarer plusieurs variables successivement (dans terminal ou script): | ||
Ligne 193: | Ligne 194: | ||
echo $var1 | echo $var1 | ||
</code> | </code> | ||
- | |||
- | Retour : | ||
<code> | <code> | ||
Ligne 203: | Ligne 202: | ||
</code> | </code> | ||
- | ===proctection : "readonly" === | + | ===protection : "readonly" === |
On protège une variable avec la commande "readonly". La variable devient alors "une variable en lecture seule". Cela lui donne la caractéristique d'être figée : on ne peut plus alors, au cours du même script, réaffectée par une nouvelle valeur une même variable, y compris si cette variable a été déclarée vide. | On protège une variable avec la commande "readonly". La variable devient alors "une variable en lecture seule". Cela lui donne la caractéristique d'être figée : on ne peut plus alors, au cours du même script, réaffectée par une nouvelle valeur une même variable, y compris si cette variable a été déclarée vide. | ||
Ligne 216: | Ligne 215: | ||
unset var1 var2 | unset var1 var2 | ||
</code> | </code> | ||
- | Retour : | ||
- | |||
<code> | <code> | ||
toto | toto | ||
Ligne 242: | Ligne 239: | ||
echo "$var1 $var2" | echo "$var1 $var2" | ||
</code> | </code> | ||
- | |||
- | Retour : | ||
<code> | <code> | ||
Ligne 265: | Ligne 260: | ||
echo "$var1 $var2 $var3" | echo "$var1 $var2 $var3" | ||
</code> | </code> | ||
- | Retour : | ||
<code bash> | <code bash> | ||
Ligne 273: | Ligne 267: | ||
mais pour un paramètre : | mais pour un paramètre : | ||
- | yep coucou vous | + | yep coucou |
yep | yep | ||
- | yep vous | + | yep |
</code> | </code> | ||
Ligne 281: | Ligne 275: | ||
==== Exportation de la valeur d'une variable==== | ==== Exportation de la valeur d'une variable==== | ||
- | Exporter la valeur d'une variable signifie que l'on envoie à un processus fils la valeur d'une variable depuis le processus père. | + | Exporter la valeur d'une variable signifie que l'on envoie à un processus fils, la valeur d'une variable d'un processus père. |
<note> | <note> | ||
- | Un processus c'est un programme en cours d'exécution, mais aussi son environnement d'exécution.\\ | + | Un processus, c'est un programme en cours d'exécution, mais aussi son environnement d'exécution.\\ |
- | Ainsi le shell qui lance un script est le processus père du script dont on lance l'exécution. | + | Ainsi le shell qui lance un script est le processus père du script lancé. |
</note> | </note> | ||
- | * On peut exporter la valeur d'une variable déclarée dans le shell courant vers un script. | + | * On peut exporter depuis le terminal, une valeur pour remplacer provisoirement celle d'un script. |
- | <code> | + | <code user> |
Coucou="Bonjour" | Coucou="Bonjour" | ||
- | #puis | + | </code> |
+ | puis : | ||
+ | <code user> | ||
echo 'echo "Coucou=$Coucou"' > test.sh | echo 'echo "Coucou=$Coucou"' > test.sh | ||
- | #puis | + | </code> |
+ | puis: | ||
+ | <code user> | ||
chmod u+x test.sh | chmod u+x test.sh | ||
- | #puis | + | </code> |
+ | puis : | ||
+ | <code user> | ||
export Coucou | export Coucou | ||
- | #puis | + | </code> |
+ | puis : | ||
+ | <code user> | ||
./test.sh | ./test.sh | ||
- | #retour: | + | </code> |
+ | <code> | ||
Coucou="Bonjour" | Coucou="Bonjour" | ||
</code> | </code> | ||
- | * La valeur de la variable "Coucou" est relative au script "test.sh" que dans le shell courant. | + | >La valeur de la variable "Coucou" est exporté au script "test.sh" pour le shell courant. |
- | C'est-à-dire si l'on ferme le terminal et le ré-ouvre, alors : | + | >C'est-à-dire, tant que le terminal n'est pas réinitialisé. |
- | + | >Une fois le terminal réinitialisé, si on lance ./test.sh, ce script est le processus | |
- | <code> | + | >fils de ce "nouveau" processus père (= le nouveau terminal) qui n'a plus en mémoire |
- | ./test.sh #l'appel du script | + | >la valeur "Bonjour" pour la variable vide "Coucou". |
+ | Et dans ce cas : | ||
+ | <code user> | ||
+ | ./test.sh | ||
</code> | </code> | ||
- | ne renverra plus | + | ne renverra plus : |
<code> | <code> | ||
Coucou="Bonjour" | Coucou="Bonjour" | ||
Ligne 320: | Ligne 326: | ||
</code> | </code> | ||
+ | <note> | ||
+ | Pour réinitialiser son terminal,\\ | ||
+ | il suffit de fermer et de le ré-ouvrir | ||
+ | ou de rechercher son fichier ~/.bashrc : | ||
+ | <code user> | ||
+ | source ~/.bashrc | ||
+ | </code> | ||
- | =====Quand les valeurs sont des paramètres ===== | + | ou |
- | ====Les paramètres de positions ==== | + | <code user> |
+ | . ~/.bashrc | ||
+ | </code> | ||
+ | |||
+ | </note> | ||
+ | =====Quand les valeurs sont des paramètres ===== | ||
+ | <note> | ||
+ | On peut considérer que les termes paramètre et argument sont synonymes.\\ | ||
+ | Le terme paramètre de position, renvoie à l'appel de la valeur des paramètres (ou arguments) passés au script. | ||
+ | </note> | ||
+ | ====Utiliser des paramètres de positions ==== | ||
Lorsqu'on ajoute un argument au script avant son exécution, on peut alors récupérer la valeur de ce paramètre.\\ | Lorsqu'on ajoute un argument au script avant son exécution, on peut alors récupérer la valeur de ce paramètre.\\ | ||
Ligne 517: | Ligne 540: | ||
=====Typologie des variables ===== | =====Typologie des variables ===== | ||
Comme nous l'avons vu on peut affecter une variable par différents types de valeurs ; des chaînes de caractères, des nombres, des valeurs d'autres variables, des substitutions de commandes.\\ | Comme nous l'avons vu on peut affecter une variable par différents types de valeurs ; des chaînes de caractères, des nombres, des valeurs d'autres variables, des substitutions de commandes.\\ | ||
- | On dit pour cela quand bash les variables ne sont pas typées.\\ | + | On dit pour cela qu'en bash les variables ne sont pas typées.\\ |
Mais il peut être intéressant de typer une variable. Pour ce faire, il faut utiliser des commandes internes à bash qui permettent de déclarer une variable typée.\\ | Mais il peut être intéressant de typer une variable. Pour ce faire, il faut utiliser des commandes internes à bash qui permettent de déclarer une variable typée.\\ | ||
Ligne 560: | Ligne 583: | ||
</code> | </code> | ||
- | **POSIX : Les commandes let et ( ( ... ) ) permettent de typer les variables pour effectuer des calculs sur les variables (synonyme de declare -i).** | + | **Méthode POSIX : Les commandes let et ( ( ... ) ) permettent de typer les variables pour effectuer des calculs sur les variables (synonyme de declare -i).** |
</note> | </note> | ||
Ligne 652: | Ligne 675: | ||
5 | 5 | ||
</code> | </code> | ||
+ | <note tip> | ||
+ | * L'incrémentation se fait aussi sur une boucle ! | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | i=1 # on initialise le compteur | ||
+ | while [ $i -le 10 ]; do | ||
+ | echo $i | ||
+ | let $[ i+=1 ] # incremente i de 1 a chaque boucle | ||
+ | done | ||
+ | </code> | ||
+ | [[atelier:chantier:script-bash-les-tableaux#se-creuser-un-peu-les-meninges|voir aussi ici]] | ||
+ | |||
+ | * Ou encore de cette manière : | ||
+ | <code bash> | ||
+ | N=$(($N+1)) | ||
+ | </code> | ||
+ | [[doc:programmation:shell:avancee#les-fonctions|voir ici le code complet de cet extrait]] | ||
+ | </note> | ||
====Changements de bases ==== | ====Changements de bases ==== | ||
Bash permet de changer de base (Il est par défaut en base 10)\\ | Bash permet de changer de base (Il est par défaut en base 10)\\ | ||
Ligne 665: | Ligne 706: | ||
[[doc:programmation:shell:shell#variables-et-environnement|Le shell pour tous : "Variables et environnement"]]\\ | [[doc:programmation:shell:shell#variables-et-environnement|Le shell pour tous : "Variables et environnement"]]\\ | ||
- | [[doc:programmation:shell:variables]] | + | [[doc:programmation:shell:variables]]\\ |
+ | [[http://abs.traduc.org/abs-fr/ch04.html|Guide avancé d'écriture des scripts Bash : Introduction aux variables et aux paramètres]] | ||
+ | =====La suite c'est ici ===== | ||
+ | [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles|script-bash-detail-sur-les-parametres]] |