Shell - Interpréteurs de commandes : Ce qu'il faut savoir. Un interpréteur de commandes (shell) est un programme qui lit des lignes de commandes, effectue des expansions (caractères spéciaux, substitution de commandes, tilde, globbing) et lance des processus en gérant leur environnement et leurs redirections. Le document met l'accent sur la Programmation Shell et les bonnes pratiques pour écrire des commandes et des scripts fiables. Les shells courants incluent les familles Bourne (sh, ksh, bash) et C (csh, tcsh) ; chacun implémente des syntaxes et des fichiers de configuration distincts. Ce chapitre synthétique fournit des exemples concrets et des extraits de commandes pour un usage interactif et l'administration de sessions.

🎯 Ce que vous allez apprendre

  • Caractères spéciaux et protections — identification et rôle des caractères comme #, \, ' et " dans la ligne de commande ; neutraliser une méta‑fonctionnalité via l'antislash ou choisir le type de quote adapté pour contrôler l'expansion afin d'éviter les erreurs d'interprétation lors de constructions de chemins ou d'arguments contenant des espaces ou des symboles.
  • Expansions et globbing — usage du tilde (~), des jokers ?, * et des classes [] pour générer des listes de noms de fichiers ; ces mécanismes permettent d'écrire des commandes robustes ciblant précisément des fichiers et répertoires sans recourir à des boucles externes.
  • Substitution de commandes et variables — distinction entre substitution de commande avec les backquotes `...` et l'expansion de variables $var / ${var}, et différence entre variables locales et variables d'environnement exportées. Exemples pratiques : extraire un chemin courant avec `pwd`, propager des paramètres via export et composer des commandes fiables.
  • Redirections et pipelines — redirection d'entrée/sortie (<, >, >>), here‑documents (<< IDENT) et chaînage de processus avec | pour capturer, trier et stocker des flux, et combiner utilitaires UNIX pour des traitements en ligne efficaces. Le flux d'erreur standard (stderr) se redirige explicitement, par exemple command 2>&1, pour combiner erreurs et sortie standard dans un même flux.
  • Contrôle des processus et job control — commandes internes jobs, fg, bg, kill et usage des signaux (SIGINT via Ctrl‑C, suspension via Ctrl‑Z). Nommer, mettre en arrière‑plan, ramener au premier plan et terminer proprement des jobs en session interactive.
  • Alias, complétion et fichiers de configuration — création d'alias simples (alias rm='rm -i'), configuration de la complétion par TAB, et lecture des fichiers de login et de sous‑shell (/etc/profile, ~/.profile, ~/.bashrc, ~/.cshrc). Automatiser une configuration utilisateur cohérente et personnaliser l'environnement shell.

📑 Sommaire du document

  • Caractères spéciaux, expansions
  • Substitutions et variables
  • Historique des commandes
  • Complétion des noms de fichiers
  • Alias
  • Lancements de processus et redirections
  • Contrôle des processus
  • Fichiers de configuration

💡 Pourquoi choisir ce cours ?

Document concis de six pages rédigé par Thierry Vaira, orienté vers la programmation de scripts et administration système. Le cours privilégie des exemples de commandes réelles et des fragments de fichiers de configuration pour aller directement à l'essentiel. Il compare explicitement les familles Bourne et C‑Shell, ce qui permet d'anticiper les différences de syntaxe lors du déploiement sur diverses plates‑formes UNIX. Pour qui cherche une référence pratique et rapide sur expansions, redirections et gestion de jobs, ce chapitre offre un ratio théorie/pratique efficace.

De l'usage interactif à la Programmation Shell

Le shell sert à la fois d'interface interactive et de moteur d'automatisation. En mode interactif, il facilite l'exploration du système et les corrections rapides ; en mode script, il permet d'automatiser des tâches répétitives via des fichiers .sh. La transition implique des pratiques supplémentaires : gestion stricte des erreurs, citations correctes des variables, et choix des utilitaires adaptés pour garantir la portabilité et la robustesse des scripts. Les exemples inclus montrent comment transformer une séquence de commandes manuelles en bash script réutilisable et testable.

Scripts vs Mode Interactif

Les scripts sont destinés à l'automatisation, à l'exécution planifiée ou à la reproductibilité d'une suite d'opérations ; l'usage interactif privilégie la rapidité et l'adaptabilité. Un script doit include un en‑tête explicite (shebang), des contrôles d'erreur et des commentaires clairs pour faciliter la maintenance. En pratique, testez d'abord les commandes interactivement, puis écrivez un script modulaire et exécutable pour automatiser le flux. L'utilisation de fonctions internes et de variables d'environnement rend les scripts plus lisibles et plus simples à déboguer.

Introduction à la programmation Shell

Rendre un fichier exécutable est une étape minimale pour lancer un script. Ajouter un shebang en première ligne indique l'interpréteur souhaité, puis modifier les permissions. Évitez les dépendances non documentées et testez les scripts dans des environnements représentatifs avant déploiement ; documentez aussi les variables attendues et les prérequis pour faciliter la réutilisation et le diagnostic.

#!/bin/bash
chmod +x mon_script.sh
./mon_script.sh

Variables d'environnement et configuration système

Les variables d'environnement contrôlent le comportement du shell et des processus fils. Variables essentielles à connaître :

  • $PATH — liste des répertoires parcourus pour trouver les exécutables.
  • $HOME — répertoire personnel de l'utilisateur.
  • $USER — nom de l'utilisateur courant.
  • $SHELL — chemin de l'interpréteur par défaut.

Variables système prédéfinies courantes : PATH affecte l'exécution des commandes. La variable $MAIL peut pointer vers la boîte aux lettres système et sert à notifier la présence de nouveaux messages système ; $LOGNAME reflète le nom d'identification et est parfois utilisé par des utilitaires pour l'affichage. Comprendre these variables permet d'éviter des erreurs liées à des chemins manquants ou à des contextes d'exécution différents entre sessions interactives et processus automatisés.

Utilitaires courants et éditeurs

  • vi — éditeur puissant disponible sur quasiment toutes les distributions.
  • nano — éditeur plus simple pour des modifications rapides.
  • grep — filtrage et recherche dans les flux et fichiers.
  • sed — édition de flux et transformations textuelles en ligne.

La rédaction de scripts nécessite l'usage d'éditeurs comme vi ou nano (ou emacs selon préférence) pour garantir une édition fiable des fichiers source.

Maîtriser la ligne de commande Unix/Linux

Maîtriser la ligne de commande implique de comprendre la syntaxe, la gestion des droits, et l'usage des utilitaires standards pour l'administration système. Des commandes comme ps, top, find et awk combinées via pipelines permettent d'automatiser le diagnostic et le traitement d'informations. Pratiquez la construction de pipelines qui respectent le flux standard et vérifiez toujours le comportement attendu dans un environnement de test avant d'exécuter des commandes sur des systèmes de production.

Automatisation et administration système via scripts

Les scripts bash sont des outils clés pour l'automatisation et l'administration système : planification via cron, déploiements répétables, sauvegardes et supervision. Adoptez des conventions (noms de fonctions, gestion d'erreurs, journalisation), testez les retours d'état ($?) et protégez les opérations sensibles. Lors de traitements sur flux standard, documentez si la logique lit depuis stdin ou redirige des fichiers, et assurez la robustesse face aux entrées inattendues.

👤 À qui s'adresse ce cours ?

  • Public cible : administrateurs système débutants à intermédiaires, développeurs travaillant en environnement UNIX/Linux et utilisateurs avancés souhaitant fiabiliser leurs sessions interactives et configurations shell.
  • Prérequis : maîtrise des commandes de base d'Unix (cd, ls, cat), notions de système de fichiers et permissions, et usage d'un terminal; connaissance élémentaire des processus (PID) et redirections est recommandée.

❓ Foire Aux Questions (FAQ)

Comment distinguer une variable locale d'une variable d'environnement et quand utiliser export ? Une variable locale existe seulement dans le shell courant ou le script ; l'opérateur export propage une variable aux processus fils en la plaçant dans l'environnement. Utilisez set pour lister les locales et env pour vérifier l'environnement transmis.

Quelle est la différence pratique entre lancer une commande avec & et la mettre en arrière‑plan avec bg %n ? Ajouter & démarre directement le processus en arrière‑plan et rend la main immédiatement, tandis que suspendre (Ctrl‑Z) puis exécuter bg %n convertit un job arrêté en job en exécution arrière‑plan. La gestion s'effectue via les numéros de job (%n) et l'affichage détaillé avec jobs -l qui montre aussi les PID.