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 [15/10/2015 18:18] milou [Création, suppression, exportation de variables] |
doc:programmation:shells:script-bash-variables-arguments-parametres [21/10/2015 19:05] milou [La suite c'est ici] |
||
---|---|---|---|
Ligne 12: | Ligne 12: | ||
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 ! | ||
- | ------ | ||
**Nota : Les autres wiki :** | **Nota : Les autres wiki :** | ||
* [[doc:programmation:shells:debuter-avec-les-scripts-shell-bash | debuter-avec-les-scripts-shell-bash]] | * [[doc:programmation:shells:debuter-avec-les-scripts-shell-bash | 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]] | + | * [[doc:programmation:shells:script-bash-detail-sur-les-parametres-et-les-boucles | 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]] | + | * [[doc:programmation:shells: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-etat-de-sorie-et-les-tests|script-bash-etat-de-sorie-et-les-tests]] | ||
* [[doc:programmation:bash:script:tableaux|script-bash-les-tableaux]] | * [[doc:programmation:bash:script:tableaux|script-bash-les-tableaux]] | ||
Ligne 54: | Ligne 53: | ||
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 script> |
#!/bin/bash | #!/bin/bash | ||
nx_fichier=les-fonctions | nx_fichier=les-fonctions | ||
Ligne 61: | Ligne 60: | ||
</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'', dont la valeur 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''. | ||
Ligne 67: | Ligne 68: | ||
La valeur d'une variable peut être un nombre, un ou plusieurs caractères, du texte espacé, une commande, la valeur d'une variable. | La valeur d'une variable peut être un nombre, un ou plusieurs caractères, du texte espacé, une commande, la valeur d'une variable. | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
var1=a | var1=a | ||
Ligne 90: | Ligne 91: | ||
===Déclaration de plusieurs variables sur une ligne=== | ===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 : | 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 script> |
#!/bin/bash | #!/bin/bash | ||
set -o posix | set -o posix | ||
Ligne 115: | Ligne 116: | ||
<note tip> | <note tip> | ||
Pour concaténer les valeurs deux variables : | Pour concaténer les valeurs deux variables : | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
var1=lala | var1=lala | ||
Ligne 135: | Ligne 136: | ||
Par exemple dans un script : | Par exemple dans un script : | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
echo "Bonjour : qui êtes-vous ?" | echo "Bonjour : qui êtes-vous ?" | ||
Ligne 147: | Ligne 148: | ||
* L'option -p permet d'insérer un message avant l'attente de la valeur que l'utilisateur doit entrer. | * L'option -p permet d'insérer un message avant l'attente de la valeur que l'utilisateur doit entrer. | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
read -p "entrez votre prénom: " prenom | read -p "entrez votre prénom: " prenom | ||
Ligne 153: | Ligne 154: | ||
</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. | ||
Ligne 159: | Ligne 161: | ||
read -p "entrez votre nom et prénom: " nom prenom | read -p "entrez votre nom et prénom: " nom prenom | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
entrez votre nom et prénom: | entrez votre nom et prénom: | ||
- | </code> | + | </file> |
>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''. | >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''. | ||
Ligne 168: | Ligne 170: | ||
echo $prenom $nom | echo $prenom $nom | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
facile debian | facile debian | ||
- | </code> | + | </file> |
Mais dans un script c'est plus rapide ! 8-) | Mais dans un script c'est plus rapide ! 8-) | ||
* read et variable non-déclarée | * read et variable non-déclarée | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
read -p "entrez votre nom d'utilisateur: " | read -p "entrez votre nom d'utilisateur: " | ||
Ligne 189: | Ligne 191: | ||
Quelques options utiles de la commande ''read''. | 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: | ||
Ligne 201: | Ligne 206: | ||
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. | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
var1=bonjour | var1=bonjour | ||
Ligne 223: | Ligne 228: | ||
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. | 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 script> |
#!/bin/bash | #!/bin/bash | ||
var1=toto | var1=toto | ||
Ligne 244: | Ligne 249: | ||
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 script essai.sh> |
#!/bin/bash | #!/bin/bash | ||
var1=coucou | var1=coucou | ||
Ligne 258: | Ligne 263: | ||
</code> | </code> | ||
- | <code> | + | <code bash script essai.sh> |
#!/bin/bash | #!/bin/bash | ||
var1=yep | var1=yep | ||
Ligne 298: | Ligne 303: | ||
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 lancé. | 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]] | + | Sur la notion de processus voir [[doc:programmation:shells:bash-les-differents-caracteres-speciaux?&#notion-de-processus|Notion de processus]] |
</note> | </note> | ||
Ligne 307: | Ligne 312: | ||
</code> | </code> | ||
>On déclare la variable ''Coucou'', affectée de la valeur ''Bonjour'' depuis le terminal. | >On déclare la variable ''Coucou'', affectée de la valeur ''Bonjour'' depuis le terminal. | ||
+ | > | ||
>Le shell courant l'a enregistré. | >Le shell courant l'a enregistré. | ||
<code user> | <code user> | ||
Ligne 312: | Ligne 318: | ||
</code> | </code> | ||
>Là, on crée le fichier "test.sh" contenant la ligne : '' echo "Coucou=$Coucou" ''. | >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. | >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> | ||
Ligne 321: | Ligne 328: | ||
</code> | </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)). | >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 ! | >Attention, ce n'est jamais la __valeur__ d'une variable que l'on exporte ! | ||
<code user> | <code user> | ||
./test.sh | ./test.sh | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
Coucou="Bonjour" | Coucou="Bonjour" | ||
- | </code> | + | </file> |
>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" ''). | >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" ''). | ||
Ligne 340: | Ligne 348: | ||
./test.sh | ./test.sh | ||
</code> | </code> | ||
- | + | <file config retour de la commande> | |
- | <code> | + | |
Coucou= | Coucou= | ||
- | </code> | + | </file> |
<note> | <note> | ||
Ligne 373: | Ligne 380: | ||
EXEMPLES : soit le script "essai.sh" | EXEMPLES : soit le script "essai.sh" | ||
- | <code bash> | + | <code bash script essai.sh> |
#!/bin/bash | #!/bin/bash | ||
var=Bonjour | var=Bonjour | ||
Ligne 389: | Ligne 396: | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
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 | ||
a | a | ||
Ligne 397: | Ligne 404: | ||
tous les paramètres a b c | tous les paramètres a b c | ||
- | </code> | + | </file> |
* Tous les arguments passés au scripts $* et $@ sont synonymes | * Tous les arguments passés au scripts $* et $@ sont synonymes | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
echo $1 | echo $1 | ||
Ligne 412: | Ligne 419: | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
bonjour | bonjour | ||
bonjour à tous | bonjour à tous | ||
bonjour à tous | bonjour à tous | ||
3 | 3 | ||
- | </code> | + | </file> |
* Là de même pour $* et $@ : | * Là de même pour $* et $@ : | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
echo $1 | echo $1 | ||
Ligne 432: | Ligne 439: | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
bonjour à tous | bonjour à tous | ||
bonjour à tous | bonjour à tous | ||
bonjour à tous | bonjour à tous | ||
1 | 1 | ||
- | </code> | + | </file> |
* Mais avec la commande set qui modifie provisoirement les paramètres : | * Mais avec la commande set qui modifie provisoirement les paramètres : | ||
- | Pour plus de détails sur la commande set voir : [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles?&#syntaxe-de-set]] | + | Pour plus de détails sur la commande set voir : [[doc:programmation:shells:script-bash-detail-sur-les-parametres-et-les-boucles?&#syntaxe-de-set]] |
- | <code bash> | + | <code bash script essai.sh> |
#!/bin/bash | #!/bin/bash | ||
set "bonjour à tous" | set "bonjour à tous" | ||
Ligne 454: | Ligne 461: | ||
</code> | </code> | ||
- | <code > | + | <file config retour de la commande> |
bonjour à tous | bonjour à tous | ||
bonjour à tous | bonjour à tous | ||
bonjour à tous | bonjour à tous | ||
1 | 1 | ||
- | </code> | + | </file> |
* Ou encore : | * Ou encore : | ||
- | <code> | + | <code bash script essai.sh> |
#!/bin/bash | #!/bin/bash | ||
set bonjour à tous | set bonjour à tous | ||
Ligne 476: | Ligne 483: | ||
</code> | </code> | ||
- | <code > | + | <file config retour de la commande> |
bonjour à tous | bonjour à tous | ||
bonjour à tous | bonjour à tous | ||
Ligne 482: | Ligne 489: | ||
3 | 3 | ||
- | </code> | + | </file> |
=====Récupérer la longueur d'une valeur de variable===== | =====Récupérer la longueur d'une valeur de variable===== | ||
Ligne 489: | Ligne 496: | ||
Exemples : | Exemples : | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
var="j'aime debian-facile" | var="j'aime debian-facile" | ||
Ligne 519: | Ligne 526: | ||
====Substitution simple : $(commande)==== | ====Substitution simple : $(commande)==== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
dir=$(pwd) | dir=$(pwd) | ||
Ligne 528: | Ligne 535: | ||
</code> | </code> | ||
*plusieurs commandes: | *plusieurs commandes: | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
echo $(pwd ; ls) | echo $(pwd ; ls) | ||
Ligne 537: | Ligne 544: | ||
</code> | </code> | ||
=== Imbrication avec ''set'' === | === Imbrication avec ''set'' === | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set $(pwd ; whoami) | set $(pwd ; whoami) | ||
Ligne 544: | Ligne 551: | ||
</code> | </code> | ||
Ou | Ou | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
set -- $(ls -l $(pwd)/.bashrc) | set -- $(ls -l $(pwd)/.bashrc) | ||
Ligne 572: | Ligne 579: | ||
* 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 script> |
#!/bin/bash | #!/bin/bash | ||
declare -i x=35*2 | declare -i x=35*2 | ||
Ligne 584: | Ligne 591: | ||
* 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 script> |
#!/bin/bash | #!/bin/bash | ||
declare -ir a=35*2 | declare -ir a=35*2 | ||
Ligne 602: | Ligne 609: | ||
==== 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 : [[doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques?&#operateurs-arithmetiques|les opérateurs arithmétiques]] |
===Syntaxe=== | ===Syntaxe=== | ||
<code> | <code> | ||
Ligne 610: | Ligne 617: | ||
</code> | </code> | ||
=== Exemples=== | === Exemples=== | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
let "a = 10" | let "a = 10" | ||
Ligne 642: | Ligne 649: | ||
==== 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 [[doc:programmation:shells: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é.\\ | ||
Ligne 672: | Ligne 679: | ||
* incrémentation, décrémentation de la valeur 1 : ''<nowiki>(( var++ ))</nowiki>'' ; ''<nowiki>(( ++var ))</nowiki>'' ; ''<nowiki>(( var-- ))</nowiki>'', etc. | * incrémentation, décrémentation de la valeur 1 : ''<nowiki>(( var++ ))</nowiki>'' ; ''<nowiki>(( ++var ))</nowiki>'' ; ''<nowiki>(( var-- ))</nowiki>'', etc. | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
let "var = 5" | let "var = 5" | ||
Ligne 691: | Ligne 698: | ||
* L'incrémentation se fait aussi sur une boucle ! | * L'incrémentation se fait aussi sur une boucle ! | ||
- | <code bash> | + | <code bash script> |
#!/bin/bash | #!/bin/bash | ||
i=1 # on initialise le compteur | i=1 # on initialise le compteur | ||
Ligne 724: | Ligne 731: | ||
=====La suite c'est ici ===== | =====La suite c'est ici ===== | ||
- | [[atelier:chantier:script-bash-detail-sur-les-parametres-et-les-boucles|script-bash-detail-sur-les-parametres]] | + | [[doc:programmation:shells:script-bash-detail-sur-les-parametres-et-les-boucles|script-bash-detail-sur-les-parametres]] |