Aller au contenu

Création du Premier Script Shell Bash

1. Objectif du cours

Apprendre les bases du shell Bash scripting : structure d’un script, commandes essentielles, contrôles, automatisation via cron et bonnes pratiques pour rédiger, tester et maintenir un script d’administration.

2. Notions et définitions essentielles

  • Shell : interpréteur de commandes facilitant l’interaction utilisateur/OS (ex. bash, sh, dash, ksh, zsh, csh, tcsh).
  • Shebang : première ligne d’un script qui indique l’interpréteur, par exemple #!/bin/bash.
  • Script : fichier texte contenant une suite de commandes exécutées par le Shell.
  • Code retour ($?) : valeur indiquant le résultat de la dernière commande (0 = succès).
  • Cron / crontab : planificateur de tâches pour automatiser l’exécution de scripts selon une syntaxe temporelle.

3. Fonctionnement et principes

  • Un script est interprété ligne par ligne ; la syntaxe doit être correcte sinon la commande n’est pas exécutée.
  • Tout ce qui suit # est un commentaire et n’est pas interprété.
  • Les caractères spéciaux (?, *, &, < >, ‘ ’, ~, “ ”, ^, { }, [ ], ;, \, #, !, $, espace, etc.) sont interprétés par le Shell ; les échapper avec \ pour les traiter comme des caractères littéraux.
  • Variables : pas de typage explicite. Déclaration nom=valeur et appel avec $nom. Ex. dayJ=$(date +%Y-%m-%d).
  • Structures de contrôle : if / elif / else / fi, case ... esac pour multi-branches, boucles for ... in ...; do ... done, while test; do ... done, until test; do ... done.
  • Composition de commandes : ; enchaîne, | pipe le résultat vers la suivante, && exécute la seconde si la première réussit, || exécute la seconde si la première échoue.
  • Automatisation : crontab stocke les tâches planifiées selon 5 champs temporels (minute, heure, jour du mois, mois, jour de la semaine), suivi de l’utilisateur et de la tâche.

4. Commandes et manipulations

Groupées par procédure, extraites du cours : - Préparer et écrire un script : - cd /chemin/de/destination — se placer dans le dossier de destination. - nano nom_script.sh — créer/éditer le fichier (extension .sh recommandée). - Insérer en tête : #!/bin/bash (shebang). - Commenter avec #. - Rendre exécutable et lancer : - chmod +x nom_script.sh — donner les droits d’exécution. - sh nom_script.sh ou ./nom_script.sh — lancer le script. - Gérer cron : - crontab -l — afficher la liste des tâches planifiées. - crontab -e — éditer les tâches. - crontab -r — supprimer toutes les actions planifiées. - Exemple de ligne cron : 00 23 * * * /root/scripts/sauvegarde.sh (s’exécute à 23:00 chaque jour). - Exemples de commandes internes vues : - dayJ=$(date +%Y-%m-%d) — définition de la variable date. - pathsave=/tmp/backup_$dayJ puis /bin/mkdir $pathsave — création d’un répertoire de sauvegarde. - /bin/tar -czvf $pathsave/fichierasauvegarder_$dayJ.tar.gz /tmp/fichierasauvegarder — création d’une archive. - serveur=$(cat serveur.txt), read name, read uid, ssh $i "sudo useradd -m -u $uid new-admin" — extrait d’un script d’ajout d’utilisateur. - Contrôle de résultat : - $? utilisé pour tester le code retour d’une commande (ex. if [ $? -eq 0 ]; then ... fi).

5. Sécurité et bonnes pratiques

  • Échapper les caractères spéciaux avec \ pour éviter des interprétations non voulues.
  • Ne pas précipiter la rédaction : définir précisément le but, découper en étapes puis traduire en commandes.
  • Définir et nommer clairement les variables pour la lisibilité.
  • Tester chaque commande indépendamment avant de l’intégrer dans le script.
  • Commenter abondamment pour faciliter la maintenance et la compréhension par un tiers.
  • Pour les sauvegardes, éviter l’usage de /tmp en entreprise ; préférer un autre point de montage pour des raisons de sécurité.
  • Vérifier les messages d’erreur, corriger et retester : tester avec plusieurs configurations avant automatisation.

6. Points essentiels à retenir pour le TSSR

  • Le shebang #!/bin/bash en tête du fichier indique l’interpréteur du script.
  • chmod +x est nécessaire pour rendre exécutable un script ; lancer via sh nom_script.sh ou ./nom_script.sh.
  • Les variables sont non typées : déclaration var=val et appel $var ; les substitutions (ex. $(date ...)) sont courantes.
  • Les structures conditionnelles (if/elif/else, case) et boucles (for, while, until) permettent d’automatiser la logique.
  • Les opérateurs de composition ; | && || permettent d’enchaîner et contrôler l’exécution des commandes.
  • Crontab utilise 5 champs temporels et autorise des plages (-), listes (,), étoiles (*), et pas (/) pour les intervalles.
  • Tester isolément chaque étape et commenter le script sont indispensables pour un script robuste.
  • Utiliser le code retour ($?) pour détecter et rapporter succès/erreur des commandes.
  • Éviter /tmp pour des sauvegardes en production ; prévoir un emplacement sûr.
  • Pour parcourir plusieurs hôtes, utiliser une boucle for avec ssh et vérifier chaque exécution via les messages d’état.

7. Tableau récapitulatif

Élément Rôle Note pratique
Shebang (#!/bin/bash) Spécifie l’interpréteur Obligatoire en tête pour fichier exécutable
; Enchaînement inconditionnel Exécute les deux commandes successivement
&& Exécution conditionnelle (succès) Seconde commande si la première réussit
crontab -l / -e / -r Afficher / éditer / supprimer tâches Syntaxe cron : minute heure jour mois jour_sem
$? Code retour de la dernière commande 0 = succès, utilisé pour messages d’état

8. Vérifications pratiques

  • Vérifier le shell par défaut : echo $SHELL — affiche le chemin de l’interpréteur par défaut.
  • Lister les shells disponibles : cat /etc/shells — confirmera les interpréteurs présents.
  • Après chmod +x, lancer le script (./nom_script.sh) pour constater son exécution effective.
  • Contrôler la planification : crontab -l montre les lignes ajoutées au crontab.
  • Dans les scripts d’opération, s’appuyer sur les messages conditionnels (ex. affichage "User X added on Y" ou "Error on Y") basés sur $? pour valider le succès sur chaque hôte.
  • Pour sauvegarde, vérifier la création du répertoire/path et de l’archive nommée avec la date (convention $dayJ) — présence du fichier indique succès.

9. Flashcards Anki

Que fait la commande echo $SHELL :: Affiche le chemin vers l'interpréteur de commandes (shell) par défaut de l'utilisateur. Que fait la commande cat /etc/shells :: Affiche la liste des shells disponibles sur le système. À quoi sert le shebang #!/bin/bash :: Indique que le script doit être exécuté avec bash. Comment rendre un script exécutable :: chmod +x nom_script.sh. Comment lancer un script Bash localement :: ./nom_script.sh (ou sh nom_script.sh). Que représente $? dans un script :: Le code retour de la commande précédente (0 = succès). Quel est le rôle de crontab -l :: Afficher la liste des actions planifiées. Que signifie la syntaxe cron "00 23 * * * /root/scripts/sauvegarde.sh" :: Exécuter le script à 23:00 chaque jour. Comment créer une archive gzip via tar comme dans l'exemple :: /bin/tar -czvf destination.tar.gz /chemin/source. Comment définir la date du jour dans une variable dayJ :: dayJ=$(date +%Y-%m-%d).