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/07/2014 17:42] Hypathie [Création, suppression, exportation de variables] |
doc:programmation:shells:script-bash-variables-arguments-parametres [10/07/2014 12:22] Hypathie [Création, suppression, exportation de variables] |
||
---|---|---|---|
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}} | ||
Ligne 39: | Ligne 39: | ||
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
- | NomDelaVariable=ValeurDeLaVariable | + | nom_de_la_variable=ValeurDeLaVariable |
</code> | </code> | ||
- | >La valeur "ValeurDeLaVariable" a été mémorisée. | + | |
+ | >La valeur ''ValeurDeLaVariable'' a été mémorisée. | ||
===$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 : | + | 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 53: | ||
ls -la ~/$nx_fichier | ls -la ~/$nx_fichier | ||
</code> | </code> | ||
- | >Les programmes (ou commandes) "touch" et "ls" ont utilisé la valeur de | + | >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 | + | >la fonction nommée ''nx_fichier'', dont la valeur correspond à la chaîne |
- | >de caractères "les_fonctions". | + | >de caractères ''les_fonctions''. |
===Une variable n'est pas typée=== | ===Une variable n'est pas typée=== | ||
Ligne 90: | Ligne 91: | ||
</code> | </code> | ||
- | <note> | + | <note important> |
- | Le nom d'une variable peut être fait des lettres de a-z ou de A-Z ; contenir des chiffres de 0-9 (mais précédé d'une ou plusieurs lettres minuscules ou majuscules).\\ | + | Le __nom d'une variable__ peut être composé : |
- | Il peut contenir un underscore _.\\ | + | * par des lettres de a-z ou de A-Z ; |
- | Mais il ne doit jamais commencer par un nombre ; par underscore ; un caractère spécial ;\\ | + | * par des chiffres de 0-9 . |
- | ni être un mélange de lettres minuscules et majuscules. | + | * Il peut contenir un underscore ''_''. |
+ | Mais il ne doit jamais : | ||
+ | * commencer par un nombre ; | ||
+ | * par underscore ; | ||
+ | * un caractère spécial ; | ||
+ | * ni être un mélange de lettres minuscules et majuscules. | ||
</note> | </note> | ||
- | * Voir "l'exemple 4.3. Affectation de variable, basique et plus élaborée" du : [[http://abs.traduc.org/abs-fr/ch04s02.html|Guide avancé d'écriture des scripts Bash : "4.2. Affectation d'une variable"]] | + | * Voir [[http://abs.traduc.org/abs-fr/ch04s02.html|l'exemple 4.3. Affectation de variable, basique et plus élaborée]] |
- | * Voir "Variable nulle et variable non-déclarée dans l'exemple "4.4. Entier ou chaîne de caractères ?" du : [[http://abs.traduc.org/abs-fr/ch04s03.html|Guide avancé d'écriture des scripts Bash : "4.3. Les variables Bash ne sont pas typées"]] | + | * Voir [[http://abs.traduc.org/abs-fr/ch04s03.html|Variable nulle et variable non-déclarée dans l'exemple]] |
<note tip> | <note tip> | ||
Ligne 139: | Ligne 145: | ||
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): |
<code user> | <code user> | ||
read -p "entrez votre nom et prénom: " nom prenom | read -p "entrez votre nom et prénom: " nom prenom | ||
Ligne 150: | Ligne 156: | ||
</code> | </code> | ||
- | >On entre par exemple debian facile, puis on peut récupérer la valeur de chacune des | + | >On entre par exemple les deux chaînes de caractères, ''debian'' et ''facile'', puis on peut récupérer la valeur de chacune des deux variables ''nom'' et ''prenom''. |
- | >variables "nom" et "prenom". | + | |
<code user> | <code user> | ||
Ligne 169: | Ligne 174: | ||
</code> | </code> | ||
- | >Ci-dessus, on n'a pas mis le "nom" de la variable, parce qu'on ne cherchera pas | + | >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. | >à 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 | + | >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 à | + | >commande est ''0'', donc elle est considérée comme exécutée, et le shell passe à |
>l'exécution de la commande suivante. | >l'exécution de la commande suivante. | ||
<note> | <note> | ||
- | Les options de read les plus intéressantes. | + | Quelques options utiles de la commande ''read''. |
- | * -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 |
- | On peut utiliser plusieurs options. Par exemple: | + | On peut utiliser plusieurs options.\\ Par exemple: |
<code user> | <code user> | ||
read -p "entrez votre année de naissance (deux derniers chiffres): " -n 2 annee | read -p "entrez votre année de naissance (deux derniers chiffres): " -n 2 annee | ||
Ligne 210: | Ligne 215: | ||
====Protection de variable : "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 variable en lecture seule, y compris si cette variable a été déclarée nulle. |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 294: | Ligne 299: | ||
Coucou="Bonjour" | Coucou="Bonjour" | ||
</code> | </code> | ||
- | puis : | + | >On déclare la variable ''Coucou'', affectée de la valeur ''Bonjour'' depuis le terminal. |
+ | >Le shell courant l'a enregistré. | ||
<code user> | <code user> | ||
echo 'echo "Coucou=$Coucou"' > test.sh | echo 'echo "Coucou=$Coucou"' > test.sh | ||
</code> | </code> | ||
- | puis: | + | >Là, on crée le fichier "test.sh" contenant la ligne : '' echo "Coucou=$Coucou" ''. |
+ | >Il contient une variable, de même nom que celle, précédemment déclarée et affectée de la valeur ''Bonjour'' depuis le terminal. | ||
<code user> | <code user> | ||
chmod u+x test.sh | chmod u+x test.sh | ||
</code> | </code> | ||
- | puis : | + | >Le fichier "test.sh" devient exécutable pour l'utilisateur principal. |
<code user> | <code user> | ||
export Coucou | export Coucou | ||
</code> | </code> | ||
- | puis : | + | >On exporte la variable ''Coucou''((Il s'agit ben sûr, de celle déclarée dans le terminal au début de l'exemple)). |
+ | >Attention, ce n'est jamais la __valeur__ d'une variable que l'on exporte ! | ||
<code user> | <code user> | ||
./test.sh | ./test.sh | ||
Ligne 314: | Ligne 322: | ||
</code> | </code> | ||
- | >La valeur de la variable "Coucou" est exporté et peut valoir pour le script "test.sh" | + | >Il faut que le script déclare une variable de même nom (''Coucou= '') ; qu'il récupère celle exportée depuis le terminal (''$Coucou'') ; et bien évidemment, qu'il affiche (''echo'') tout cela :( ''echo "Coucou=$Coucou" ''). |
- | >qui devient le processus fils du shell courant, à condition que ce script contienne | + | |
- | >une variable de même nom (Coucou= ) que celle exportée. | + | >Dans ces conditions, la valeur de la variable ''Coucou'' une fois exportée, peut valoir pour la variable du script "test.sh" qui est le __processus fils__ du shell courant. |
- | >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 | + | >Mais une fois __le terminal réinitialisé__, si on lance ./test.sh, ce script est le |
- | > en mémoire la valeur "Bonjour" pour la variable nulle "Coucou" du script. | + | >processus fils d'un "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 : | >Et dans ce cas : | ||
<code user> | <code user> | ||
Ligne 330: | Ligne 339: | ||
<note> | <note> | ||
- | Pour réinitialiser son terminal,\\ | + | __Pour réinitialiser son terminal__,\\ |
il suffit de fermer et de le ré-ouvrir\\ | il suffit de fermer et de le ré-ouvrir\\ | ||
ou de recharger son fichier ~/.bashrc : | ou de recharger son fichier ~/.bashrc : | ||
Ligne 368: | Ligne 377: | ||
echo "tous les paramètres $@" | echo "tous les paramètres $@" | ||
</code> | </code> | ||
- | ET | + | |
<code user> | <code user> | ||
./essai.sh a b c | ./essai.sh a b c | ||
</code> | </code> | ||
- | Retour: | ||
<code> | <code> | ||
Bonjour # on peut récupérer une valeur (ou des valeurs) déclarée(s) et les paramètres de position | Bonjour # on peut récupérer une valeur (ou des valeurs) déclarée(s) et les paramètres de position | ||
Ligne 392: | Ligne 400: | ||
echo $# | echo $# | ||
</code> | </code> | ||
- | ET | + | |
<code user> | <code user> | ||
./essai.sh bonjour à tous | ./essai.sh bonjour à tous | ||
</code> | </code> | ||
- | retour : | ||
<code> | <code> | ||
Ligne 413: | Ligne 420: | ||
echo $# | echo $# | ||
</code> | </code> | ||
- | ET | + | |
<code user> | <code user> | ||
./essai.sh "bonjour à tous" | ./essai.sh "bonjour à tous" | ||
</code> | </code> | ||
- | retour : | ||
<code> | <code> | ||
Ligne 441: | Ligne 447: | ||
</code> | </code> | ||
- | Retour : | ||
<code > | <code > | ||
bonjour à tous | bonjour à tous | ||
Ligne 449: | Ligne 454: | ||
</code> | </code> | ||
- | OU ENCORE : | + | * Ou encore : |
<code> | <code> | ||
Ligne 463: | Ligne 468: | ||
./essai.sh | ./essai.sh | ||
</code> | </code> | ||
- | |||
- | Retour : | ||
<code > | <code > |