15. Laboratoire 02 — scripts et contrôle de processus
15.1 Syntaxe Bash
$0est le nom du script;$1,$2, etc. sont les arguments;$@représente l'ensemble;- une affectation ne met pas d'espaces autour de
=; - les guillemets doubles permettent l'expansion, les guillemets simples la désactivent;
$(commande)substitue la sortie d'une commande;[ condition ],if,for,while, tableaux et fonctions structurent le script.
15.2 Exercice 15 — test d'un serveur
Le script :
- se place dans
~/server; - lance
python3 -m uvicorn main:app &; - sauvegarde le PID dans
server_pid=$!; - définit une fonction exécutant
kill $server_pid; - enregistre cette fonction avec
trap ... EXIT; - attend brièvement;
- exécute
curl localhost:8000; - retourne
0si le serveur répond,1sinon.
trap garantit le nettoyage même lors d'une sortie anticipée. $! n'est pas le PID du shell : c'est le PID du dernier processus lancé en arrière-plan.
15.3 Configuration du shell
.bashrc est lu lors du démarrage d'un shell interactif et peut définir des alias, des fonctions, des variables d'environnement et l'invite PS1. Un alias raccourcit une commande, par exemple alias ll='ls -alF'; il peut aussi masquer la commande réellement exécutée et doit donc rester compréhensible.
PATH est une liste ordonnée de répertoires séparés par :. Le shell retient le premier exécutable correspondant au nom demandé. Pour ajouter un dossier sans écraser la configuration existante :
Code (bash) · sélectionner pour copier
export PATH="$PATH:$HOME/.bin"
Des alias Git peuvent être placés dans .gitconfig pour abréger status, add, commit, push, checkout ou des formats de journal. Ils ne changent pas la sémantique Git et ne doivent pas remplacer la compréhension des commandes développées.
15.4 Exercice 16 — retour Git automatisé
Le script exécute test.sh, mémorise son statut, puis répète tant que celui-ci est non nul. Après un échec, il appelle une fonction effectuant git reset HEAD~1 --hard; après un succès, il termine avec exit 0.
Cette boucle met en œuvre un contrôle par rétroaction : tester, observer, modifier, retester. git reset --hard détruit les modifications locales et déplace l'état du dépôt; il doit rester limité au dépôt artificiel de l'atelier.
15.5 Ce que vérifient les scripts de correction
Les corrections contrôlent les chemins et contenus exacts, les permissions d'exécution, la présence ou l'absence de fichiers, le nombre de .out, les pipelines, les résultats TSV et les codes de retour du test serveur. L'exercice 16 vérifie surtout que le serveur final répond; il ne prouve pas à lui seul que toute la boucle Git est élégante ou robuste.