Qu'est-ce que Shell ?

Programme qui lit et interprète les commandes tapées par l'utilisateur, lance des programmes et affiche les résultats. Sous Linux, bash et zsh sont très utilisés. Il offre le développement des caractères génériques, des variables, les redirections et les pipes, ainsi que le contrôle des tâches, et il peut aussi exécuter des fichiers de commandes (scripts shell) pour automatiser le travail. Son nom (« coquille » en anglais) vient de son rôle d'enveloppe autour du noyau, le cœur du système d'exploitation, placée entre celui-ci et l'utilisateur.

Nom japonais: シェル

« Shell » apparaît dans 11 questions d'entraînement réparties sur 2 thèmes, dont Bases de Linux et de la ligne de commande, Éditeurs de liens, chargeurs et exécutables.

Domaine: Bases de Linux et de la ligne de commande

Jusqu'à l'exécution d'une commande

Le shell lit une ligne saisie, développe les variables et les caractères génériques (globbing) et traite les guillemets, puis la découpe en un nom de commande et des arguments. Si le nom de commande ne contient pas de barre oblique, il lance soit une commande interne, soit le premier exécutable trouvé en parcourant dans l'ordre les répertoires de la variable d'environnement PATH. Raccorder l'entrée standard, la sortie standard et la sortie d'erreur standard selon les redirections et les pipes indiqués fait aussi partie du travail du shell.

Scripts shell

Si un fichier de commandes porte sur sa première ligne un shebang comme #!/bin/bash et qu'il a le droit d'exécution, on peut l'exécuter comme un programme. Les arguments se désignent par $1 et $2, leur nombre par $#, et le code de retour de la commande précédente par $? ; if, for et while permettent d'écrire des branchements et des boucles. Les scripts servent souvent à automatiser des procédures fixes, comme le lancement d'une série de simulations ou la synthèse de journaux.

Différents shells

Outre bash, très utilisé sous Linux, il existe zsh et fish, riches en fonctions interactives, et dash, léger et rapide à démarrer. Les scripts écrits uniquement avec la syntaxe de sh définie par la norme POSIX fonctionnent dans de nombreux shells. Les scripts de configuration de l'environnement des outils EDA sont encore parfois écrits dans la syntaxe de la famille csh (csh, tcsh), et un fichier de réglages chargé avec source doit correspondre au type de shell.

S'entraîner : questions sur Shell

touch crée un nouveau fichier à partir de 666, et mkdir un nouveau répertoire à partir de 777, en retirant les bits de l'umask. Quelle combinaison de droits est correcte lorsqu'un nouveau fichier et un nouveau répertoire sont créés dans un shell dont l'umask vaut 027 ?

  1. AFichier 637, répertoire 750
  2. BFichier 640, répertoire 750
  3. CFichier 750, répertoire 750
Afficher la réponse et l'explication

Réponse : B. Fichier 640, répertoire 750

L'umask indique les bits de permission à « retirer » des fichiers et répertoires nouvellement créés. 027 retire l'écriture (2) au groupe et la lecture, l'écriture et l'exécution (7) aux autres : un fichier devient donc rw-r----- (640) à partir de 666, et un répertoire rwxr-x--- (750) à partir de 777. Il ne s'agit pas d'une soustraction en octal, mais d'un retrait bit à bit (666 AND NOT 027). Avec l'umask 022, très courant, le même calcul donne 644 pour les fichiers et 755 pour les répertoires.

Questions fréquentes

Quelle différence y a-t-il entre un shell et un terminal ?

Un terminal (émulateur de terminal) est un programme qui sert de fenêtre : il affiche des caractères et reçoit les saisies du clavier. Le shell s'exécute à l'intérieur, interprète comme des commandes les chaînes reçues et les exécute. On peut passer de bash à zsh dans le même terminal.

Quelle différence y a-t-il entre « source fichier » et « ./fichier » ?

Avec ./fichier, un nouveau processus shell exécute le script : les variables ou le répertoire courant modifiés à l'intérieur ne sont pas conservés dans le shell d'origine quand il se termine. source (ou .) exécute le contenu du fichier dans le shell courant, si bien que des réglages comme les variables d'environnement restent en place. C'est pourquoi les fichiers de réglages qui préparent l'environnement d'un outil se chargent avec source.

« Shell » dans les explications

Questions mentionnant « Shell » (11)

  1. touch crée un nouveau fichier à partir de 666, et mkdir un nouveau répertoire à partir de 777, en retirant les bits de l'umask. Quelle combinaison de droits est correcte lorsqu'un nouveau fichier et un nouveau répertoire sont créés dans un shell dont l'umask vaut 027 ?
  2. Si l'on exécute les deux lignes ci-dessus dans un shell, quels caractères s'affichent ?
  3. Dans un script shell, dans quel cas la condition du if ci-dessus est-elle vraie ?
  4. Lorsque la fonction main d'un programme C se termine par « return 3; », que devient généralement cette valeur 3 ?
  5. Dans le répertoire personnel, « ls » n'affiche que notes.txt, alors que « ls -a » affiche « . », « .. », « .bashrc » et « notes.txt ». Quelle explication de ce résultat est correcte ?
  6. Un répertoire contient six fichiers : a1.txt, a2.txt, a10.txt, b1.txt, c1.txt et a1.csv. Combien de fichiers s'affichent si l'on exécute « ls [ab]?.txt » dans ce répertoire ?
  7. Quelle description des fichiers trouvés en exécutant « find /data -name "*.log" -mtime +7 -size +100M » avec le find de GNU est correcte ?
  8. Sur un serveur auquel on s'est connecté par SSH, on a lancé un long traitement avec « ./run.sh & », puis, en fermant la connexion, le traitement s'est arrêté lui aussi. Quelle est la manière la plus appropriée de le lancer pour qu'il continue après la fermeture de la connexion ?
  9. Si l'on exécute dans l'ordre les commandes ci-dessus, quelle est la sortie des deux commandes echo ?
  10. Le script exécutable run.sh, situé dans le répertoire courant, donne « command not found » quand on le lance en tapant « run.sh », mais s'exécute quand on tape « ./run.sh ». Quelle en est la raison ?
  11. Si l'on exécute dans l'ordre les commandes ci-dessus, quelle est la combinaison des sorties des deux commandes bash -c ?

Termes associés

Variable Variable d'environnement Valeur de retour Permissions (droits d'accès) SSH Redirection des entrées-sorties Argument cron Expression régulière (regex) Git

Retour au glossaire