Qu'est-ce qu'un shell Linux et quels sont les niveaux de shell ?

La variable $SHLVL vous indique combien de coquilles vous avez de profondeur. Si cela vous embrouille, cela vaut la peine de commencer par le début.

Capture d'écran de la commande Linux $SHLVL en cours d'utilisation

Qu'est-ce qu'une coquille?

UNE coquille prend des commandes et donne ces commandes au système d'exploitation sous-jacent à exécuter. Sur la plupart des systèmes Linux, le programme shell est appelé FRAPPER (The Bourne Again Shell), mais il y en a d'autres, dont le Coquille C (tcsh) et le KORN coquille (ksh).

Comment accéder au shell Linux

Généralement, en tant qu'utilisateur, vous interagissez avec le programme shell via un émulation de terminal programme tel que XTerm, console, ou gnome-terminal.

Si vous exécutez un gestionnaire de fenêtres tel que Boîte ouverte ou un environnement de bureau tel que GNOME ou KDE, vous trouverez un émulateur de terminal à partir d'un menu ou d'un tiret. Sur de nombreux systèmes, le raccourci CTRL+ALT+T ouvre une fenêtre de terminal.

Alternativement, vous pouvez passer à un autre TTY (téléimprimeur), qui fournit un accès direct à un shell de ligne de commande. Vous pouvez le faire en appuyant sur

CTRL+ALT+F1 ou CTRL+ALT+F2.

Qu'est-ce qu'un niveau Shell?

Lorsque vous exécutez une commande dans un shell, elle s'exécute au niveau du shell. Dans un shell, vous pouvez ouvrir un autre shell, ce qui en fait un sous-shell du shell qui l'a ouvert. Par conséquent, le shell parent est considéré comme le shell de niveau 1 et le shell enfant est un shell de niveau 2.

Comment afficher le niveau de coque

La façon de savoir dans quel niveau de shell vous exécutez est d'utiliser la variable $SHLVL. Pour voir le niveau de shell dans lequel vous exécutez actuellement, tapez ce qui suit:

echo $SHLVL. 

Lorsque vous exécutez la commande ci-dessus dans une fenêtre de terminal, le résultat renvoyé est 2. Si, toutefois, vous exécutez la même commande à l'aide du tty, le résultat est 1. Le tty n'exécute pas un environnement de bureau et est un shell de niveau 1.

pourquoi est-ce le cas? L'environnement de bureau que vous exécutez est exécuté sur un shell. Cette coquille est de niveau 1. Toute fenêtre de terminal que vous ouvrez à partir de cet environnement de bureau est un enfant du shell qui a ouvert l'environnement de bureau. Par conséquent, le niveau du shell ne peut pas commencer à un nombre autre que 2.

Comment créer des sous-shells

La façon la plus simple de tester le concept de coques et de sous-shells est la suivante. Ouvrez une fenêtre de terminal, puis saisissez ce qui suit:

echo $SHLVL. 

Lorsque vous exécutez cette commande à partir d'une fenêtre de terminal, le niveau minimum du shell est 2.

Tapez ce qui suit dans la fenêtre du terminal:

ch. 

La commande sh exécute un shell interactif. Cela signifie que vous utilisez un shell dans un shell ou un sous-shell.

Si vous saisissez à nouveau ceci:

echo $SHLVL. 

Vous voyez que le niveau du shell est défini sur 3. L'exécution de la commande sh à partir du sous-shell ouvre un sous-shell du sous-shell et le niveau du shell est donc au niveau 4.

Pourquoi le niveau de coque est-il important?

Le niveau du shell est important lorsque l'on réfléchit à la portée des variables dans vos scripts. Pour un exemple simple:

chien=maisie
echo $chien.

Si vous exécutez la commande ci-dessus dans un shell, le mot maisie s'affiche dans la fenêtre du terminal.

Pour ouvrir un nouveau shell, tapez ce qui suit:

ch. 

Lorsque vous exécutez cette commande, vous verrez que rien n'est renvoyé:

echo $chien. 

C'est parce que la variable $dog n'est disponible qu'au niveau 2 du shell. Si vous tapez exit pour quitter le sous-shell et exécutez echo $chien encore une fois, le mot maisie s'affiche à nouveau.

Il convient également de réfléchir au comportement des variables globales au sein d'un shell.

Ouvrez une nouvelle fenêtre de terminal, puis saisissez ce qui suit:

export chien=maisie
echo $chien.

Comme prévu, le mot maisie affiche. Ensuite, ouvrez un sous-shell et tapez echo $chien de nouveau. Cette fois, le mot maisie s'affiche même si vous êtes dans un sous-shell. La raison en est que la commande export a rendu la variable $dog globale. La modification de la variable $dog dans le sous-shell, même si vous utilisez la commande export, n'affecte pas ses shells parents.

Connaître le niveau de shell sur lequel vous travaillez a une importance lors de l'écriture de scripts. Les exemples de cet article sont simples, mais il est courant qu'un script shell appelle un autre script shell qui à son tour appelle un autre script shell. Tout cela fonctionne à différents niveaux. Connaître le niveau de la coque est important.