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 | ||
doc:programmation:shell:variables [31/07/2013 21:50] 127.0.0.1 modification externe |
doc:programmation:shell:variables [21/02/2023 17:17] (Version actuelle) agp91 [Utiliser les variables dans un script] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Les variables ====== | ====== Les variables ====== | ||
+ | |||
+ | * Objet : Les variables | ||
+ | * Niveau requis :{{tag>débutant avisé}} | ||
+ | * Commentaires : Une variable d'environnement est un objet nommé qui contient un nom et une valeur | ||
+ | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-) | ||
+ | * Suivi : | ||
+ | * Création par [[user>smolski]] le 27/09/2012 | ||
+ | * mis à jour par [[user>greenmerlin]] le 02/11/2016 | ||
+ | * Testé par [[user>greenmerlin]] le 02/11/2016 | ||
+ | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=5936 |C'est ici]] | ||
===== Préalable ===== | ===== Préalable ===== | ||
Ligne 15: | Ligne 25: | ||
Certaines variables sont prédéfinies, par exemple USER ; mais on peut en créer autant que l'on veut. \\ | Certaines variables sont prédéfinies, par exemple USER ; mais on peut en créer autant que l'on veut. \\ | ||
Par exemple, si Robert veut autoriser d'autres adultes que lui à utiliser son hachoir, il peut faire que le programme demande à l'utilisateur quel âge il a ; la réponse est enregistrée dans la variable age ; ensuite, le programme va examiner le contenu de cette variable. Si age >= 18, alors le hachoir peut se mettre en route ; mais si age < 18, le hachoir refuse de se mettre en marche. | Par exemple, si Robert veut autoriser d'autres adultes que lui à utiliser son hachoir, il peut faire que le programme demande à l'utilisateur quel âge il a ; la réponse est enregistrée dans la variable age ; ensuite, le programme va examiner le contenu de cette variable. Si age >= 18, alors le hachoir peut se mettre en route ; mais si age < 18, le hachoir refuse de se mettre en marche. | ||
- | |||
===== Les variables en shell ===== | ===== Les variables en shell ===== | ||
- | En shell, pour désigner le contenu d'une variable, on écrit le nom de la variable précédé du signe dollar. \\ | + | le paquet coreutils vous donne accès à 2 commandes pour visualiser les variables de votre système |
+ | |||
+ | **printenv** et **env**, ses commandes font exactement la meme chose mais l'une évolue dans un context BSD l'autre dans un context *.NIX | ||
+ | de plus la commande **set** sans options vous renverra exactement la meme chose en rajoutant les variables locales de votre shell. | ||
+ | |||
+ | Avec le shell ''bash'', pour utiliser la valeur associée à une variable, on fait précéder le nom de l'étiquette de cette variable par le caractère ''$''. \\ | ||
Exemple : | Exemple : | ||
<code bash> | <code bash> | ||
echo $HOME</code> | echo $HOME</code> | ||
- | Cela affiche le nom du répertoire personnel de l'utilisateur, mémorisé par la variable HOME. | + | La commande ''echo'' va afficher le nom du répertoire personnel de l'utilisateur, valeur qui avait été associée à la variable ''HOME'' au moment de son identification sur le système. |
===== Les noms de variables ===== | ===== Les noms de variables ===== | ||
- | Par convention, les variables relevant du système, comme HOME, USER et beaucoup d'autres, __sont en majuscules__, tandis que l'on recommande d'//écrire en minuscules les variables que l'on se crée soi-même//. On évite ainsi la désagréable surprise de remplacer une variable importante et de casser tout ou partie de son système. | + | Par convention, les variables relevant du système, comme ''HOME'', ''USER'' et beaucoup d'autres, __sont en majuscules__, tandis que l'on recommande d'//écrire en minuscules les variables que l'on se crée soi-même//. On évite ainsi la désagréable surprise de remplacer une variable importante et de casser tout ou partie de son système. |
- | <note important>Les noms de variables sont en effet sensibles à la casse : USER, user, User, uSeR etc. sont des variables différentes.</note> | + | <note important>Le nom utilisé pour une étiquette de variable est en effet sensible à la casse : ''USER'', ''user'', ''User'', ''uSeR'' etc... sont des variables distinctes.</note> |
===== Définir une variable ===== | ===== Définir une variable ===== | ||
- | La façon de donner une valeur à une variable varie selon le type de shell utilisé : | + | La méthode permettant d'affecter une valeur à une variable varie selon le type de ''shell'' utilisé : |
- | Avec C-Shell (csh, tcsh, lcsh), on utilise la commande setenv : | + | Avec ''C-Shell'' (csh, tcsh, lcsh), on utilise la commande ''setenv'' : |
- | setenv foo bar | + | <code c> |
- | echo $foo | + | setenv foo bar |
- | + | echo $foo | |
- | Pour la famille des Bourne Shell (sh, bash, zsh, ksh), on utilise export : | + | </code> |
- | + | Pour la famille des ''Bourne Shell'' (sh, bash, zsh, ksh), on utilise ''='' : | |
- | foo=bar | + | |
- | export foo | + | |
- | echo $foo | + | |
+ | <code bash> | ||
+ | foo=bar | ||
+ | echo $foo | ||
+ | </code> | ||
Comme vous pouvez le remarquer : | Comme vous pouvez le remarquer : | ||
- pour définir le contenu d'une variable, on écrit simplement son nom, sans le signe $ | - pour définir le contenu d'une variable, on écrit simplement son nom, sans le signe $ | ||
- tandis que pour utiliser le contenu d'une variable, on fait précéder son nom du signe $ | - tandis que pour utiliser le contenu d'une variable, on fait précéder son nom du signe $ | ||
+ | - | ||
+ | Si vous voulez que cette variable <code>$foo</code> soit interprétée par des processus enfants de votre shell (donc lancés depuis lui) il faudra "exporter cette variable. | ||
+ | exemple : | ||
+ | <code bash> | ||
+ | $ foo=bar | ||
+ | $ set | grep foo | ||
+ | foo=bar | ||
+ | $ env | grep foo | ||
+ | $ export foo=bar | ||
+ | $ set | grep foo | ||
+ | foo=bar | ||
+ | |||
+ | $ env | grep foo | ||
+ | foo=bar | ||
+ | </code> | ||
===== Les variables d'environnement ===== | ===== Les variables d'environnement ===== | ||
- | Les valeurs des variables sont accessibles aux commandes lancées par le shell. \\ | + | Ces différentes variables sont accessibles aux commandes exécutées depuis le ''shell'' où elles ont été déclarées, |
- | L'ensemble de ces valeurs constitue l'environnement. | + | et les ''sous-shell''s de ce ''shell'' si elles ont été ''export''ées . \\ |
+ | |||
+ | L'ensemble de ces variables est appelé ''variables d'environnement''. | ||
- | On peut aussi supprimer une variable de l'environnement avec : | + | il est possible de supprimer une variable de l'environnement avec : |
unsetenv (C-Shell) | unsetenv (C-Shell) | ||
Ligne 66: | Ligne 98: | ||
|DISPLAY |L'écran sur lequel les programmes X travaillent. | | |DISPLAY |L'écran sur lequel les programmes X travaillent. | | ||
|PRINTER |pour les commandes d'impression. Contient le nom de l'imprimante sur laquelle il faut envoyer vos fichiers. | | |PRINTER |pour les commandes d'impression. Contient le nom de l'imprimante sur laquelle il faut envoyer vos fichiers. | | ||
- | |EDITOR |utilisée par mutt, forum, et beaucoup d'autres commandes. Contient le nom de votre éditeur de textes préféré. | | + | |EDITOR |utilisée par mutt, forum, et beaucoup d'autres commandes. Contient le nom de votre éditeur de texte préféré. | |
|VISUAL |la même chose qu'EDITOR. | | |VISUAL |la même chose qu'EDITOR. | | ||
|SHELL |contient le nom de votre shell. | | |SHELL |contient le nom de votre shell. | | ||
Ligne 72: | Ligne 104: | ||
|USER |contient votre nom de login. | | |USER |contient votre nom de login. | | ||
|LOGNAME |la même chose que USER. | | |LOGNAME |la même chose que USER. | | ||
- | |-PATH |contient une liste de répertoires dans lesquels le shell va chercher les commandes. | | + | |-PATH |contient une liste des répertoires dans lesquels le shell va chercher les commandes. | |
== Nota == | == Nota == | ||
Ligne 80: | Ligne 112: | ||
==== Exercice ==== | ==== Exercice ==== | ||
- | Assurez-vous que | + | Assurez-vous que le chemin |
<code> | <code> | ||
- | /usr/local/games/bin</code> | + | /usr/local/games/bin |
- | + | </code> | |
- | se trouve bien dans votre PATH(([[manuel:path]])). | + | se trouve bien dans votre [[:doc:programmation:shell:path|PATH]]. |
+ | Réponse : | ||
+ | comment le rajouter efficacement | ||
+ | <code> | ||
+ | export PATH="${PATH}:/usr/local/games/bin" | ||
+ | </code> | ||
===== Utiliser les variables dans un script ===== | ===== Utiliser les variables dans un script ===== | ||
Dans les scripts, on peut utiliser des variables définies à l'extérieur (avec setenv ou export), mais aussi définir ses variables locales propres au script. \\ | Dans les scripts, on peut utiliser des variables définies à l'extérieur (avec setenv ou export), mais aussi définir ses variables locales propres au script. \\ | ||
- | On donne une valeur à une variable avec une commande de la forme : | + | On affecte une valeur à une variable avec une commande de la forme : |
- | nom-de-variable=valeur | + | nom_de_variable=valeur |
Les variables sont utilisées pour stocker des informations. | Les variables sont utilisées pour stocker des informations. | ||
Ligne 97: | Ligne 134: | ||
^ Variables ^ Résultats ^ | ^ Variables ^ Résultats ^ | ||
|$0 |Le nom de la commande (i.e. : du script) | | |$0 |Le nom de la commande (i.e. : du script) | | ||
- | |$1, $2, etc. |Le premier, deuxième, etc, argument passés au script. | | + | |$1, $2, etc. |Le premier, deuxième, etc, argument passés au script. Ce sont les paramètres positionnels.| |
- | |$* |La liste de tous les arguments passés au script. | | + | |$* |Tous les paramètres positionnels ($1, $2, etc).\\ $* et $@ : Sont remplacés par les tous les paramètres positionnels sans protection : $1 $2 ... ${n}.\\ "$*" : Est remplacé par touts les paramètres positionnels sans protection. C'est ce qui est retourné qui est protégé par les guillemets doubles, pour ne former qu'un seul mot : "$1 $2 ... ${n}".\\ "$@" : Est remplacé par tous les paramètres positionnels protégés. Ils sont chacun protégé par guillemets doubles : "$1" "$2" ... "${n}". | |
- | |$# |Le nombre d'arguments passés au script. | | + | |$@ |::: | |
+ | |$# |Le nombre d'arguments passés au script (nombre de paramètre positionnel). | | ||
|$? |Le code de retour de la dernière commande lancée. | | |$? |Le code de retour de la dernière commande lancée. | | ||
|$! |Le numéro de process de la dernière commande lancée en tâche de fond. | | |$! |Le numéro de process de la dernière commande lancée en tâche de fond. | |