Retour au cours

introduction au shell : bash, commandes de base et scripts simples

Objectifs

  • Comprendre ce qu’est un shell et son rôle dans un environnement DevOps.
  • Utiliser les commandes de base pour naviguer et manipuler des fichiers.
  • Écrire, rendre exécutable et lancer un premier script shell simple.
  • Connaître les premières bonnes pratiques pour des scripts robustes.

Le Shell, outil central du DevOps

En DevOps, l’automatisation est reine. Le shell est le langage qui permet de “parler” directement au système d’exploitation pour automatiser des tâches. Bash (Bourne-Again SHell) est le shell le plus répandu, ce qui en fait une compétence fondamentale. Vous l’utiliserez partout : dans les pipelines CI/CD, sur les serveurs, dans les conteneurs Docker, etc.

Commandes essentielles à connaître

Voici une sélection des commandes que vous utiliserez tous les jours.

  • Navigation
    • pwd : Affiche le répertoire courant (Print Working Directory).
    • ls -la : Liste tous les fichiers (-a) avec des détails (-l).
    • cd <dossier> : Change de répertoire (Change Directory). cd .. pour remonter, cd ~ pour aller à votre dossier personnel.
  • Manipulation de fichiers/dossiers
    • mkdir <nom> : Crée un dossier (Make Directory).
    • touch <fichier> : Crée un fichier vide.
    • cp <source> <dest> : Copie.
    • mv <source> <dest> : Déplace ou renomme.
    • rm <fichier> : Supprime un fichier. rm -r <dossier> pour un dossier.
  • Visualisation
    • cat <fichier> : Affiche le contenu entier d’un fichier.
    • less <fichier> : Affiche le contenu page par page (plus sûr pour les gros fichiers).
    • head / tail <fichier> : Affiche les premières/dernières lignes.
  • Recherche
    • grep <motif> <fichier> : Cherche un motif dans un fichier.
    • find <dossier> -name <nom> : Cherche des fichiers.

Écrire un script minimal

Un script est un simple fichier texte contenant une suite de commandes.

Fichier mon_script.sh :

#!/usr/bin/env bash
# La ligne ci-dessus (le "shebang") indique que ce script doit être exécuté avec Bash.

# Active le mode strict pour plus de sécurité.
set -euo pipefail

# Affiche un message de bienvenue à l'utilisateur actuel
echo "Bonjour, $USER !"

# Affiche la date et l'heure
echo "Nous sommes le :"
date

Rendre le script exécutable et le lancer :

# Ajoute la permission d'exécution
chmod +x mon_script.sh

# Exécute le script
./mon_script.sh

Bonnes pratiques dès le départ

  1. Le mode strict : Commencez toujours vos scripts par set -euo pipefail. Cela vous protège contre de nombreuses erreurs courantes (commandes qui échouent silencieusement, variables non définies).
  2. Citer les variables : Lorsque vous utilisez une variable, mettez-la systématiquement entre guillemets doubles ("$MA_VAR"). Cela évite les bugs si la variable contient des espaces ou des caractères spéciaux.
  3. Tester en local : Avant d’intégrer un script dans une automatisation plus large (un pipeline CI/CD, une tâche cron), assurez-vous qu’il fonctionne comme prévu en l’exécutant sur votre machine.

Pièges courants

  • Les espaces comptent : MA_VAR="valeur" est correct. MA_VAR = "valeur" est une erreur.
  • rm est irréversible : Faites particulièrement attention avec rm, surtout en combinaison avec des jokers (*). Une commande rm -rf * dans le mauvais dossier peut être catastrophique.
  • Chemins relatifs vs absolus : Un script automatisé (cron) ne s’exécute pas forcément depuis le dossier où il se trouve. Privilégiez les chemins absolus (/home/user/script.sh) pour plus de fiabilité.

Exercices

  1. Manipulation de l’environnement :

    • Créez un dossier devops_sandbox.
    • À l’intérieur, créez un fichier NOTES.md et un sous-dossier scripts.
    • Déplacez NOTES.md dans le dossier scripts.
    • Listez le contenu de devops_sandbox pour vérifier.
  2. Votre premier script d’info :

    • Créez un script info.sh qui affiche les informations suivantes :
      1. Votre nom d’utilisateur.
      2. Le chemin de votre répertoire personnel.
      3. La quantité d’espace disque utilisé sur votre système (df -h).
    • Rendez-le exécutable et lancez-le.
  3. Script avec argument :

    • Créez un script creer_backup.sh qui prend un nom de fichier en argument.
    • Le script doit copier ce fichier dans un dossier ~/backups (qu’il créera s’il n’existe pas).
    • Affichez un message de succès à la fin.