Contenu d’approfondissement.

Le shell en tant que langage de programmation utilise des variables, des paramètres (variables particulières), des fonctions, des structures de contrôle... surtout dans les shell-scripts (fichiers de commandes interprétés par le shell). Ce cours introduit uniquement les notions de variables et de shell-script ; les concepts plus algorithmiques (les paramètres, les fonctions et les structures de contrôle) seront étudiés plus tard au cours du module d’introduction à l’algorithmique et à la programmation en langage C.

Une variable est locale à un processus et elle n’est pas automatiquement connue dans les processus créés pour exécuter des commandes ou des shell-scripts. Les variables prédéfinies (que vous avez vues à la section 6) sont automatiquement transmises par copie. Pour les autres, il faut utiliser la commande export avec en arguments les variables concernées. On peut aussi affecter une variable en l’exportant et il n’est pas nécessaire de refaire appel à export si l’on modifie une variable exportée. Les commandes export et env, sans argument, affichent la liste des variables exportées. Si l’on ne veut plus qu’une variable soit exportée, il faut la supprimer avec unset et la recréer sans l’exporter.

Voilà une première manière d’exporter une variable de nom variable.

 
problème génération shellcmds verbatim

Voilà une seconde manière d’exporter une variable de nom variable en lui positionnant une valeur.

 
problème génération shellcmds verbatim

Exécution d’un shell-script dans un processus enfant. Le shell peut exécuter un shell-script dans un processus enfant ou dans le processus courant du shell. On peut exécuter un shell-script dans un processus enfant en donnant son nom en argument à un shell. Rappelez-vous que dans le cadre de ce cours, le shell utilisé est bash. L’invocation de la commande suivante suivante permet d’exécuter shell_script dans un processus enfant:  
problème génération shellcmds verbatim

L’invocation du shell est alors dite explicite. On peut éviter de spécifier le nom du shell lors de l’invocation à condition que le fichier ait aussi l’attribut exécutable (droit x).  
problème génération shellcmds verbatim

Lorsque l’exécution est ainsi activée directement par le nom du fichier, celui-ci est interprété par un shell de même nature que le shell courant: l’invocation est dite par nom. On peut aussi préciser à l’intérieur du fichier le nom du shell à exécuter en insérant en première ligne « #! nom_absolu_shell »: l’invocation du shell est alors dite implicite.

Exécution d’un shell-script dans le processus du shell courant. Le shell dispose aussi d’une fonction particulière, la fonction . (point), permettant d’exécuter un shell-script dans le processus du shell courant. La commande suivante permet d’exécuter les commandes contenues dans le fichier shell_script dans le processus courant du shell:  
problème génération shellcmds verbatim

D’une part, exécuter un shell-script dans le processus courant permet de bénéficier de l’environnement de ce processus et notamment des variables de cet environnement. D’autre part, exécuter un shell-script dans le processus courant permet de modifier l’environnement du processus courant. Ceci est fréquemment utilisé lors de modification des fichiers de configuration du shell. Les fichiers de configuration du shell sont des shell-script particuliers. Ils sont abordés en section 6. Les modifications effectuées dans le fichier de configuration .bashrc (modification de l’umask, de l’invite de commande, de variables...) peuvent être prises en compte dans le processus courant, en l’exécutant de la façon suivante:

 
problème génération shellcmds verbatim

Notez que, pour interpréter un fichier avec la fonction ., il n’est pas nécessaire que celui-ci ait le droit exécutable (x), il suffit qu’il ait le droit de lecture.
Enfin, il est à noter que la fonction source est équivalente à la fonction « . » pour le shell bash. Il est donc possible d’écrire:

 
problème génération shellcmds verbatim

Utilisation des parenthèses. L’exécution d’une commande ou d’une liste de commandes entre parenthèses s’effectue dans un processus enfant mais celui-ci bénéficie de l’environnement du processus parent, c’est-à-dire d’une copie des variables, des alias et des fonctions qu’ils soient ou non exportés. Néanmoins, toute modification effectuée dans ce processus n’est pas répercutée au niveau du processus parent.

 
 
Retour à la page de cours