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 [07/06/2014 06:57] Hypathie [Typologie des variables] |
doc:programmation:shells:script-bash-variables-arguments-parametres [08/07/2014 20:10] Hypathie [script bash : variables, arguments, paramètres] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ======script bash : variables, arguments, paramètres ====== | + | ======Script bash : variables, arguments, paramètres ====== |
* Niveau requis : {{tag>débutant}} | * Niveau requis : {{tag>débutant}} | ||
* 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 : {{tag>à-placer}} | ||
- | * Création par **Hypathie** 18/03/2014 | + | * Création par [[user>Hypathie]] 18/03/2014 |
* Testé par <Hypathie> le <Juin 2014> | * Testé par <Hypathie> le <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 : [[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**\\ | + | |
- | **Les autres numéros :** | + | * [[atelier:chantier:debuter-avec-les-scripts-shell-bash]] |
- | * wiki n°1 : [[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]] |
- | * wiki n°3 : [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles|script-bash-detail-sur-les-parametres]] | + | * [[atelier:chantier:script-bash-etat-de-sorie-et-les-tests|script-bash-etat-de-sorie-et-les-tests]] |
- | * wiki n°4 : [[atelier:chantier:script-bash-enchainement-de-commandes-et-etat-de-sortie|script-bash-enchainement-de-commandes-et-etat-de-sortie]] | + | * [[atelier:chantier:script-bash-les-tableaux|script-bash-les-tableaux]] |
- | * wiki n°5 : [[atelier:chantier:script-bash-etat-de-sorie-et-les-tests|script-bash-etat-de-sorie-et-les-tests]] | + | * [[atelier:chantier:script-bash-les-fonctions|script-bash-les-fonctions]] |
- | * wiki n°6 : [[atelier:chantier:script-bash-les-tableaux|script-bash-les-tableaux]] | + | |
- | * wiki n°7 : [[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 36: | Ligne 35: | ||
==== Affectation directe : ==== | ==== Affectation directe : ==== | ||
- | * 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 | ||
</code> | </code> | ||
- | => La valeur "ValeurDeLaVariable" a été mémorisée. | + | >La valeur "ValeurDeLaVariable" a été mémorisée. |
- | * Pour "utiliser" une variable, on se sert de sa valeur : il faut donc appeler sa valeur et cela se fait avec le caractère spécial $ accolé au nom de la variable : | + | ===$nom-de-la-variable=== |
+ | Pour "utiliser" une variable, on se sert de sa valeur : il faut donc appeler sa valeur et cela se fait avec le caractère spécial $ accolé au nom de la variable : | ||
<code bash> | <code bash> | ||
Ligne 52: | Ligne 52: | ||
ls -la ~/$nx_fichier | ls -la ~/$nx_fichier | ||
</code> | </code> | ||
+ | >Les programmes (ou commandes) "touch" et "ls" ont utilisé la valeur de | ||
+ | >la fonction nommée "nx_fichier", d'une valeur qui correspond à la chaîne | ||
+ | >de caractères "les_fonctions". | ||
- | => Les programmes (ou commandes) "touch" et "ls" ont utilisé la valeur de la fonction nommée "nx_fichier", d'une valeur qui correspond à la chaîne de caractères "les_fonctions". | + | ===Une variable n'est pas typée=== |
- | + | La valeur d'une variable peut être un nombre, un ou plusieurs caractères, du texte espacé, une commande, la valeur d'une variable. | |
- | * Exemple où la valeur d'une variable est un nombre, un ou plusieurs caractères, du texte espacé, ou une variable.\\ | + | |
<code bash> | <code bash> | ||
Ligne 67: | Ligne 69: | ||
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 80: | Ligne 80: | ||
</code> | </code> | ||
- | * On peut déclarer plusieurs variables sur une même ligne, il suffit pour cela de mettre un espace entre chacune : | + | ===Déclaration de plusieurs variables sur une ligne=== |
+ | On peut déclarer plusieurs variables sur une même ligne, il suffit pour cela de mettre un espace entre chacune : | ||
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 138: | Ligne 139: | ||
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 146: | Ligne 146: | ||
read -p "entrez votre nom et prénom: " nom prenom | read -p "entrez votre nom et prénom: " nom prenom | ||
</code> | </code> | ||
- | retour: | ||
<code> | <code> | ||
entrez votre nom et prénom: | entrez votre nom et prénom: | ||
</code> | </code> | ||
- | On entre par exemple debian facile, puis on peut récupérer la valeur de chacune des variables "nom" et "prenom" | + | >On entre par exemple debian facile, puis on peut récupérer la valeur de chacune des |
+ | >variables "nom" et "prenom". | ||
<code user> | <code user> | ||
echo $prenom $nom | echo $prenom $nom | ||
</code> | </code> | ||
- | retour : | ||
<code> | <code> | ||
facile debian | facile debian | ||
Ligne 162: | Ligne 161: | ||
Mais dans un script c'est plus rapide ! 8-) | Mais dans un script c'est plus rapide ! 8-) | ||
- | * Remarque : | + | * read et variable non-déclarée |
- | Ci-dessous, on ne met pas le "nom" de la variable, parce qu'on ne cherche pas à appeler la valeur de cette variable mais à permettre au programme de se poursuivre.\\ | + | |
- | Quand on entre dans le terminal la réponse attendu par "read", le retour de la commande et zéro, donc elle est considérée comme exécutée, et le shell passe à l'exécution de la commande suivante. | + | |
<code bash> | <code bash> | ||
Ligne 172: | Ligne 169: | ||
</code> | </code> | ||
+ | >Ci-dessus, on n'a pas mis le "nom" de la variable, parce qu'on ne cherchera pas | ||
+ | >à utiliser la valeur de cette variable. Cela permet au programme de se poursuivre. | ||
+ | >Quand on entre dans le terminal la réponse attendu par "read", le retour de la | ||
+ | >commande est zéro, donc elle est considérée comme exécutée, et le shell passe à | ||
+ | >l'exécution de la commande suivante. | ||
<note> | <note> | ||
- | **Les options de read les plus intéressantes.** | + | Les options de read les plus intéressantes. |
* -p : afficher un message | * -p : afficher un message | ||
* -n : limiter le nombre de caractères | * -n : limiter le nombre de caractères | ||
* -t : limiter le temps autorisé pour saisir un message | * -t : limiter le temps autorisé pour saisir un message | ||
* -s : ne pas afficher le texte saisi | * -s : ne pas afficher le texte saisi | ||
- | par exemple: | + | On peut utiliser plusieurs options. Par exemple: |
- | read -p "entrez votre de naissance (deux derniers chiffres): " -n 2 annee | + | <code user> |
+ | read -p "entrez votre année de naissance (deux derniers chiffres): " -n 2 annee | ||
+ | </code> | ||
</note> | </note> | ||
- | ====3) Modification de la valeur d'une variable et protection ==== | + | ====Modification de la valeur d'une variable ==== |
- | + | ||
- | ===Modification=== | + | |
Pour modifier la valeur d'une variable, il suffit de l'affecter d'une nouvelle valeur. | Pour modifier la valeur d'une variable, il suffit de l'affecter d'une nouvelle valeur. | ||
Ligne 198: | Ligne 200: | ||
echo $var1 | echo $var1 | ||
</code> | </code> | ||
- | |||
- | Retour : | ||
<code> | <code> | ||
Ligne 208: | Ligne 208: | ||
</code> | </code> | ||
- | ===proctection : "readonly" === | + | ====Protection de variable : "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 221: | Ligne 221: | ||
unset var1 var2 | unset var1 var2 | ||
</code> | </code> | ||
- | Retour : | ||
- | |||
<code> | <code> | ||
toto | toto | ||
Ligne 247: | Ligne 245: | ||
echo "$var1 $var2" | echo "$var1 $var2" | ||
</code> | </code> | ||
- | |||
- | Retour : | ||
<code> | <code> | ||
Ligne 270: | Ligne 266: | ||
echo "$var1 $var2 $var3" | echo "$var1 $var2 $var3" | ||
</code> | </code> | ||
- | Retour : | ||
<code bash> | <code bash> | ||
Ligne 278: | Ligne 273: | ||
mais pour un paramètre : | mais pour un paramètre : | ||
- | yep coucou vous | + | yep coucou |
yep | yep | ||
- | yep vous | + | yep |
</code> | </code> | ||
==== Exportation de la valeur d'une variable==== | ==== Exportation de la valeur d'une variable==== | ||
- | + | === Définition === | |
- | Exporter la valeur d'une variable signifie que l'on envoie à un processus fils, la valeur d'une variable d'un processus père. | + | Exporter la valeur d'une variable signifie que l'on envoie à un processus fils, la valeur d'une variable depuis 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é. |
+ | Sur la notion de processus voir [[atelier:chantier:bash-les-differents-caracteres-speciaux?&#notion-de-processus|Notion de processus]] | ||
</note> | </note> | ||
- | * On peut exporter depuis le terminal, la valeur d'une variable vers un script. | + | === Exemple === |
- | <code> | + | On peut exporter depuis le terminal, une valeur pour remplacer provisoirement une variable d'un script. |
+ | <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: | ||
- | Coucou="Bonjour" | ||
</code> | </code> | ||
- | |||
- | * La valeur de la variable "Coucou" est relative au script "test.sh" que dans le shell courant. | ||
- | C'est-à-dire si l'on ferme le terminal et le ré-ouvre, alors : | ||
- | |||
- | <code> | ||
- | ./test.sh #l'appel du script | ||
- | </code> | ||
- | ne renverra plus | ||
<code> | <code> | ||
Coucou="Bonjour" | Coucou="Bonjour" | ||
</code> | </code> | ||
- | mais : | + | >La valeur de la variable "Coucou" est exporté et peut valoir pour le script "test.sh" |
+ | >qui devient le processus fils du shell courant, à condition que ce script contienne | ||
+ | >une variable de même nom (Coucou= ) que celle exportée. | ||
+ | >Mais une fois le terminal réinitialisé, si on lance ./test.sh, ce script est le | ||
+ | >processus fils de ce "nouveau" processus père (= le nouveau terminal) qui n'a plus | ||
+ | > en mémoire la valeur "Bonjour" pour la variable nulle "Coucou" du script. | ||
+ | >Et dans ce cas : | ||
+ | <code user> | ||
+ | ./test.sh | ||
+ | </code> | ||
<code> | <code> | ||
Ligne 325: | Ligne 329: | ||
</code> | </code> | ||
+ | <note> | ||
+ | Pour réinitialiser son terminal,\\ | ||
+ | il suffit de fermer et de le ré-ouvrir\\ | ||
+ | ou de recharger son fichier ~/.bashrc : | ||
+ | <code user> | ||
+ | source ~/.bashrc | ||
+ | </code> | ||
+ | ou | ||
+ | |||
+ | <code user> | ||
+ | . ~/.bashrc | ||
+ | </code> | ||
+ | </note> | ||
=====Quand les valeurs sont des paramètres ===== | =====Quand les valeurs sont des paramètres ===== | ||
<note> | <note> | ||
Ligne 331: | Ligne 348: | ||
Le terme paramètre de position, renvoie à l'appel de la valeur des paramètres (ou arguments) passés au script. | Le terme paramètre de position, renvoie à l'appel de la valeur des paramètres (ou arguments) passés au script. | ||
</note> | </note> | ||
- | ====Les paramètres de positions ==== | + | ====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 568: | Ligne 585: | ||
</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> | ||