L’air est chargé d’invisibles. Des noms qui portent des valeurs. Des mots qui cachent des chemins, des identités, des pouvoirs. Dans les couloirs de Bash, rien n’est figé. Tout est variable. Une mémoire volatile où l’on peut graver ses propres règles. Ou piéger celles des autres.
4.1 Variables Bash
Elles naissent et meurent avec le shell. Des étiquettes collées sur des données.
-
Déclaration et utilisation : Pas de cérémonie. Un nom, un signe égal, une valeur. Pas d’espace. Jamais d’espace.
$ suspect="Moriarty" $ lieu_crime="Quai des Brumes" $ heure="23:45"Pour les appeler, il faut le signe du dollar. Un passeport pour accéder à leur contenu.
$ echo $suspect Moriarty $ echo "Rendez-vous à $heure, $lieu_crime." Rendez-vous à 23:45, Quai des Brumes.Les guillemets doubles laissent passer les variables. Les simples les étouffent.
$ echo 'Le suspect $suspect est introuvable.' Le suspect $suspect est introuvable. # Le nom reste une énigme. -
Variables locales et globales : Une question de portée. De qui a le droit de savoir. Par défaut, une variable reste dans le script, dans la session. Elle est locale.
$ local_secret="code_451" $ bash # On lance un nouveau shell, un nouvel interrogatoire. $ echo $local_secret # Vide. Le silence. L'oubli.La variable est morte avec l’ancien shell. Une exécution sommaire.
4.2 Variables d’environnement
Elles, elles survivent. Elles sont globales. Héritées par tous les processus enfants. Elles sont l’environnement. Le décor dans lequel chaque commande joue son rôle.
-
PATH : La liste des ruelles où le shell va chercher ses armes (les commandes).
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binUne série de chemins, séparés par des deux-points. Quand vous tapez
ls, le shell parcourt ces chemins dans l’ordre jusqu’à trouver le binaire. Ajouter un chemin, c’est armer le shell de nouvelles possibilités. Ou l’empoisonner.$ export PATH="/home/noir/mes_scripts:$PATH" # Mon chemin perso en premier, puis le reste. # Maintenant, il cherchera d'abord dans mon repaire. -
HOME, USER : L’identité.
$ echo $HOME /home/noir $ echo $USER noirVotre antre. Votre nom. Les bases d’une existence numérique.
-
export : Le mot qui rend immortel. Qui transforme une variable locale en loi universelle pour la session.
$ clef_api="ZA12-879B-GH34" $ export clef_api # Maintenant, elle est dans l'air. Tous les processus enfants la respireront.On fait souvent les deux d’un coup :
$ export PORT_SERVEUR="8080" $ export NOM_DB="archive_noire"Ces variables deviennent des repères, des signaux que d’autres programmes (un serveur, un script) vont capter.
4.3 Substitution de commandes
Parfois, la valeur que vous voulez n’est pas dans une variable. Elle est dans la sortie d’une commande. Il faut la capturer vivante.
-
$(commande): La manière moderne, claire. On enferme la commande entre$(et).$ date_du_jour=$(date +%Y-%m-%d) $ echo "Rapport du $date_du_jour" Rapport du 2024-03-05$ nombre_fichiers=$(ls -1 | wc -l) $ echo "Il y a $nombre_fichiers dossiers dans l'ombre." Il y a 17 dossiers dans l'ombre.Puissant. On peut l’imbriquer.
$ plus_gros_fichier=$(du -ah . | sort -rh | head -n 1 | cut -f2) $ echo "Le morceau le plus lourd est : $plus_gros_fichier" -
`commande`: L’ancienne syntaxe, les backticks. Elle fait la même chose, mais elle est plus sournoise, moins lisible.$ heuris=`date +%H:%M` $ echo "L'heure du crime : $heuris" L'heure du crime : 02:17Évitez-la. Elle se fond trop bien dans le texte, elle est traître.
$(...)est votre alliée.
La salle est silencieuse, mais les variables murmurent. $PATH guide vos mains. $HOME vous rappelle où ranger les preuves. La substitution de commande vous vole des réponses à la volée. Vous n’écrivez plus des ordres, vous construisez un écosystème. Un environnement sur mesure pour le crime… ou pour l’enquête.