Le shell est un interpréteur de ligne de commande. Entre le moment de la saisie de l'utilisateur et l'exécution de la commande, différents traitements sont opérés.
L'invite de commande indique que le shell est prêt à recevoir la saisie de l'utilisateur. Celle-ci est assistée par les fonctions d'éditions abordées précédemment. Dès que la touche retour charriot est frappée, le shell analyse la ligne de commande, cela consiste à identifier la commande et ses arguments. Les arguments peuvent introduire des constructions syntaxiques comme la substitution des caractères spéciaux. Dans ce cas, l’interprétation de ces construction est effectuée afin de les substituer par leur valeur. Finalement la commande avec les arguments substitués est invoquée.
Ici on détaille les différentes constructions syntaxiques existantes et les cas d'utilisation.
Une valeur peut être conservée dans une variable. Le caractère '=' est utilisé pour l'affectation d'une valeur à une variable.
# Affectation d'une valeur a une variable PI=3.14 MSG="Hello Bash"
Pour utiliser la valeur de la variable, on préfixe le nom de celle-ci par le caractère spécial '$'
echo $MSG
Le caractère $ est spécial, c'est un métacaractère qui indique au shell Bash d'effectuer une substitution de variable qui consiste à changer le nom de la variable qui suit le caractère $ par sa valeur.
La sortie d'une commande peut être substituée aux syntaxes suivantes:
# commande entre backquotes `commande` # équivalent $(commande)
Cela permet d'imbriquer des traitements. La commande est évaluée, sa sortie est ensuite intégrée en argument d'une autre commande:
# La commande echo est invoquée après substitution de # la commande pwd echo "Nous sommes dans le répertoire" $(pwd) # La substitution de commande permet d'affecter # la valeur retournée par la commande pwd à la # variable CURRENT_DIR CURRENT_DIR=$(pwd)
Le tableau ci-dessous indique pour l’inhibition totale(première ligne) et l’inhibition partielle (seconde ligne) les caractères spéciaux interprétés, autrement dit les substitutions ou les inhibitions appliquées. Le caractère ’$’ symbolise la substitution de variable et de commande. Le terme glob indique la substitution de nom de fichier.
' | “ | \ | $ | glob | |
---|---|---|---|---|---|
Inhibition totale (’) | fin | inhibé | inhibé | inhibé | inhibé |
Inhibition partielle (”) | inhibé | fin | interprété | interprété | inhibé |
Ainsi au sein d'une inhibition partielle, l'apostrophe (’) perd sa signification spéciale: autrement dit, il n’y a pas de substitution totale dans une substitution partielle.
Les constructions syntaxiques sont traitées par le shell Bash lors de la phase d'interprétation effectuée après validation de la saisie de l'utilisateur. Les différentes étapes de substitutions sont les suivantes:
Pour effectuer les substitutions dans un ordre différent ou pour appliquer deux fois de suite le même type de substitution, c'est la commande interne eval qui doit être utilisée. Cette commande relance la phase d’interprétation du shell.
# Définition des variables x=100 ptr=x # Substitution de ptr par sa valeur puis affichage echo $ptr x # la phase de substitution a lieu une seule fois, # la valeur affichée correspond au nom de la variable # mais pas à son contenu echo \$$ptr $x # La commande interne eval permet de relancer la phase # de substitution de variable une seconde fois # sur le nom de variable précédemment obtenu eval echo \$$ptr 100