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).