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:10] Hypathie [Récupérer la longueur d'une valeur de variable] |
doc:programmation:shells:script-bash-variables-arguments-parametres [10/07/2014 13:34] Hypathie [Script bash : variables, arguments, paramètres] |
||
---|---|---|---|
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** | + | **Nota : Les autres wiki :** |
+ | * [[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 31: | Ligne 36: | ||
==== 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 | + | nom_de_la_variable=ValeurDeLaVariable |
</code> | </code> | ||
- | => 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 : | + | >La valeur ''ValeurDeLaVariable'' a été mémorisée. |
+ | |||
+ | ===$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 47: | Ligne 54: | ||
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'', dont la valeur 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 62: | Ligne 71: | ||
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 75: | Ligne 82: | ||
</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 84: | Ligne 92: | ||
</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 110: | Ligne 123: | ||
* Syntaxe : | * Syntaxe : | ||
<code> | <code> | ||
- | read nom-de-la-variable | + | read nom_de_la_variable |
</code> | </code> | ||
*La valeur est enregistrée par l'utilisateur sur l'entrée standard (i.e. ce qu'on écrit à l'invite de commande).\\ | *La valeur est enregistrée par l'utilisateur sur l'entrée standard (i.e. ce qu'on écrit à l'invite de commande).\\ | ||
Ligne 133: | Ligne 146: | ||
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 | ||
</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 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''. |
<code user> | <code user> | ||
echo $prenom $nom | echo $prenom $nom | ||
</code> | </code> | ||
- | retour : | ||
<code> | <code> | ||
facile debian | facile debian | ||
Ligne 157: | Ligne 167: | ||
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 167: | Ligne 175: | ||
</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 ''0'', 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.** | + | 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 |
- | 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 193: | Ligne 206: | ||
echo $var1 | echo $var1 | ||
</code> | </code> | ||
- | |||
- | Retour : | ||
<code> | <code> | ||
Ligne 203: | Ligne 214: | ||
</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 variable en lecture seule, y compris si cette variable a été déclarée nulle. |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 216: | Ligne 227: | ||
unset var1 var2 | unset var1 var2 | ||
</code> | </code> | ||
- | Retour : | ||
- | |||
<code> | <code> | ||
toto | toto | ||
Ligne 227: | Ligne 236: | ||
==== Suppression de variable : unset==== | ==== Suppression de variable : unset==== | ||
- | Soit le script "essai.sh" : passons à ce script l'argument "vous" | + | Soit le script "essai.sh" : passons à ce script l'argument ''vous'' |
<code bash> | <code bash> | ||
Ligne 242: | Ligne 251: | ||
echo "$var1 $var2" | echo "$var1 $var2" | ||
</code> | </code> | ||
- | |||
- | Retour : | ||
<code> | <code> | ||
Ligne 265: | Ligne 272: | ||
echo "$var1 $var2 $var3" | echo "$var1 $var2 $var3" | ||
</code> | </code> | ||
- | Retour : | ||
<code bash> | <code bash> | ||
Ligne 273: | Ligne 279: | ||
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 depuis le 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 la valeur d'une variable déclarée dans le shell courant 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> |
+ | >On déclare la variable ''Coucou'', affectée de la valeur ''Bonjour'' depuis le terminal. | ||
+ | >Le shell courant l'a enregistré. | ||
+ | <code user> | ||
echo 'echo "Coucou=$Coucou"' > test.sh | echo 'echo "Coucou=$Coucou"' > test.sh | ||
- | #puis | + | </code> |
+ | >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> | ||
chmod u+x test.sh | chmod u+x test.sh | ||
- | #puis | + | </code> |
+ | >Le fichier "test.sh" devient exécutable pour l'utilisateur principal. | ||
+ | <code user> | ||
export Coucou | export Coucou | ||
- | #puis | + | </code> |
+ | >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> | ||
./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 : | + | >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" ''). |
+ | |||
+ | >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 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 : | ||
+ | <code user> | ||
+ | ./test.sh | ||
+ | </code> | ||
<code> | <code> | ||
Ligne 320: | Ligne 339: | ||
</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> | ||
- | =====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 343: | Ligne 378: | ||
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 367: | Ligne 401: | ||
echo $# | echo $# | ||
</code> | </code> | ||
- | ET | + | |
<code user> | <code user> | ||
./essai.sh bonjour à tous | ./essai.sh bonjour à tous | ||
</code> | </code> | ||
- | retour : | ||
<code> | <code> | ||
Ligne 388: | Ligne 421: | ||
echo $# | echo $# | ||
</code> | </code> | ||
- | ET | + | |
<code user> | <code user> | ||
./essai.sh "bonjour à tous" | ./essai.sh "bonjour à tous" | ||
</code> | </code> | ||
- | retour : | ||
<code> | <code> | ||
Ligne 416: | Ligne 448: | ||
</code> | </code> | ||
- | Retour : | ||
<code > | <code > | ||
bonjour à tous | bonjour à tous | ||
Ligne 424: | Ligne 455: | ||
</code> | </code> | ||
- | OU ENCORE : | + | * Ou encore : |
<code> | <code> | ||
Ligne 438: | Ligne 469: | ||
./essai.sh | ./essai.sh | ||
</code> | </code> | ||
- | |||
- | Retour : | ||
<code > | <code > | ||
Ligne 451: | Ligne 480: | ||
=====Récupérer la longueur d'une valeur de variable===== | =====Récupérer la longueur d'une valeur de variable===== | ||
- | * Pour obtenir la longueur d'une chaîne stockée dans une variable, on écrit ${#VAR}. | + | * Pour obtenir la longueur d'une chaîne stockée dans une variable, on écrit ''${#VAR}''. |
Exemples : | Exemples : | ||
Ligne 460: | Ligne 489: | ||
</code> | </code> | ||
- | * Pour récupérer la longueur d'un paramètre de position | + | * Pour récupérer la longueur d'un paramètre de position : |
FIXME | FIXME | ||
Ligne 466: | Ligne 495: | ||
=====Substitutions de commande===== | =====Substitutions de commande===== | ||
+ | ===Utilisation === | ||
Permet de se servir de la sortie d'une commande dans un autre contexte pour ; | Permet de se servir de la sortie d'une commande dans un autre contexte pour ; | ||
- affecter cette sortie à une variable ; | - affecter cette sortie à une variable ; | ||
Ligne 472: | Ligne 501: | ||
- etc. | - etc. | ||
- | Il y a deux syntaxes : | + | ===Deux syntaxes :=== |
<code> | <code> | ||
`commande` | `commande` | ||
Ligne 483: | Ligne 512: | ||
</code> | </code> | ||
- | ===$(cmd) : des exemples=== | + | ====Substitution simple : $(commande)==== |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 497: | Ligne 526: | ||
echo $(pwd ; ls) | echo $(pwd ; ls) | ||
</code> | </code> | ||
- | === $(cmd) : imbrication de commandes :=== | + | ====Imbrication de commandes : $(cmd $(cmd))==== |
<code bash> | <code bash> | ||
echo $( ls $(pwd)/Documents) | echo $( ls $(pwd)/Documents) | ||
</code> | </code> | ||
- | *avec set : | + | === Imbrication avec ''set'' === |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 517: | Ligne 546: | ||
=====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.\\ | ||
====declare et typeset ==== | ====declare et typeset ==== | ||
- | ^ commandes ^options ^ | + | ^ commandes ^options ^ |
- | |declare/typeset |-r lecture seule | | + | |declare/typeset |''-r'' : lecture seule | |
- | |declare/typeset |-i entier | | + | |declare/typeset |''-i'' : entier | |
- | |declare/typeset |-a tableau (array) | | + | |declare/typeset |''-a'' tableau (array) | |
- | |declare/typeset |-f fonction(s) | | + | |declare/typeset |''-f'' : fonction(s) | |
- | |declare/typeset |-x export | | + | |declare/typeset |''-x'' : export | |
- | |declare/typeset |-x var=$value | | + | |declare/typeset |''-x'' : ''var=$valeur'' | |
Voir : [[http://abs.traduc.org/abs-5.1-fr/ch09s04.html|Guide avancé d'écriture des scripts Bash: 9.4. Typer des variables : declare ou typeset]] | Voir : [[http://abs.traduc.org/abs-5.1-fr/ch09s04.html|Guide avancé d'écriture des scripts Bash: 9.4. Typer des variables : declare ou typeset]] | ||
- | ===Remarques sur la commande declare -i et les calculs === | + | ===Remarques sur la commande "declare" et les calculs === |
<note important> | <note important> | ||
**Méthode non POSIX**\\ | **Méthode non POSIX**\\ | ||
- | * La valeur d'une variable peut une expression arithmétique, pour initialiser une variable de type entier on utilise l'option -i de la commande declare : declare -i nom[=expression] nom[=expression] ... | + | * La valeur d'une variable peut une expression arithmétique, pour initialiser une variable de type entier on utilise l'option ''-i'' de la commande ''declare'' :\\ ''declare -i nom[=expression] nom[=expression] ...'' |
<code bash> | <code bash> | ||
Ligne 547: | Ligne 576: | ||
</code> | </code> | ||
- | * Pour que la valeur d'une variable ne soit pas accidentellement modifier, il faut ajouter l'attribut -r. | + | * Pour que la valeur d'une variable ne soit pas accidentellement modifier, il faut ajouter l'attribut ''-r''. |
<code bash> | <code bash> | ||
Ligne 555: | Ligne 584: | ||
echo $(($a+$b)) | echo $(($a+$b)) | ||
</code> | </code> | ||
- | retour | + | |
<code> | <code> | ||
80 | 80 | ||
</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 ''<nowiki>(( ... ))</nowiki>'' permettent de typer les variables pour effectuer des calculs sur les variables (synonyme de ''declare -i''). |
</note> | </note> | ||
Ligne 567: | Ligne 596: | ||
==== Les variables typées pour les calculs : let ou (( ... )) ==== | ==== Les variables typées pour les calculs : let ou (( ... )) ==== | ||
- | **Voir : [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques?&#operateurs-arithmetiques|les opérateurs arithmétiques]]** | + | Voir : [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques?&#operateurs-arithmetiques|les opérateurs arithmétiques]] |
- | ===syntaxe=== | + | ===Syntaxe=== |
<code> | <code> | ||
let 'var = 5 + 5' | let 'var = 5 + 5' | ||
Ligne 574: | Ligne 603: | ||
$(( 5 * 3 )) | $(( 5 * 3 )) | ||
</code> | </code> | ||
- | === exemples=== | + | === Exemples=== |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 595: | Ligne 624: | ||
echo $(( $var2 % $var1 )) | echo $(( $var2 % $var1 )) | ||
</code> | </code> | ||
- | Retour | ||
<code> | <code> | ||
12 | 12 | ||
Ligne 608: | Ligne 636: | ||
==== L'affectation arthmétique==== | ==== L'affectation arthmétique==== | ||
- | **Voir [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques?&#operateurs-d-affectation-arithmetique| les opérateurs d'affectation arithmétique]]** | + | Voir [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques?&#operateurs-d-affectation-arithmetique| les opérateurs d'affectation arithmétique]] |
- | Cela consiste à affecter à une variable le résultat d'un calcul arithmétique, par la **constante** (donc avec let) qu'on lui a donné.\\ | + | Cela consiste à affecter à une variable le résultat d'un calcul arithmétique, par la __constante__ (donc avec ''let'') qu'on lui a donné.\\ |
- | Soit une variable var de valeur x, si l'on fait **var +=2** alors la variable var sera **x + 2**.\\ | + | Soit une variable var de valeur x, si l'on fait ''var +=2'' alors la variable var sera ''x + 2''.\\ |
- | (cela permet de faire des incrémentation par autre chose que 1 : voir plus incrémentation, décrémentation de la valeur 1 .)\\ | + | |
- | Il en va de même pour les autres opérateurs.\\ | + | |
- | === Exemples === | + | >cela permet de faire des incrémentation par autre chose que 1.) |
+ | >Il en va de même pour les autres opérateurs.\\ | ||
+ | |||
+ | * Exemples | ||
<code bash> | <code bash> | ||
Ligne 633: | Ligne 662: | ||
</code> | </code> | ||
+ | ===Incrémentation, décrémentation=== | ||
- | ===incrémentation, décrémentation de la valeur 1 : ( ( var++ ) ) ; ( ( ++var ) ) ; ( ( var- - ) ), etc.=== | + | * incrémentation, décrémentation de la valeur 1 : ''<nowiki>(( var++ ))</nowiki>'' ; ''<nowiki>(( ++var ))</nowiki>'' ; ''<nowiki>(( var-- ))</nowiki>'', etc. |
<code bash> | <code bash> | ||
Ligne 652: | Ligne 682: | ||
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)\\ | ||
- | * base 8 (octal) : un chiffre précédé de **0**\\ | + | * base 8 (octal) : un chiffre n précédé de zéro : ''0n''\\ |
exemple : 02 => 2 en base 8 | exemple : 02 => 2 en base 8 | ||
- | * base 16(hexadécimal): un chiffre précédé de **0x**\\ | + | * base 16(hexadécimal): un chiffre n précédé de zéro+x : ''0xn''\\ |
exemple : 0x3 => 3 en base 16 | exemple : 0x3 => 3 en base 16 | ||
- | * autres bases : base#nombre | + | * autres bases : ''base#nombre'' |
* base maximale : base 64 | * base maximale : base 64 | ||
Ligne 665: | Ligne 713: | ||
[[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]] |