Script Shell - Variables et substitution de commande
Affecte avec name=value et référence avec "$name", vois comment les guillemets simples et doubles s'expansent différemment, exécute la substitution de commande $(date), fais de l'arithmétique $(( n * 2 )) et lis une entrée avec read — illustré et pratiqué dans un terminal en navigateur.
Dans un script shell, tu donnes un nom à une valeur et tu la réutilises autant de fois que tu veux.
Tu affectes avec la forme name=value, et tu ne dois pas mettre d'espaces autour du =.
Si tu en mets, c'est lu comme une commande séparée et ça déclenche une erreur.
Tu récupères la valeur affectée avec $name ou ${name}.
Si un caractère suit directement $name, il est pris comme une partie du nom de la variable, alors utilise ${name} pour marquer la limite.
De l'affectation à la référenceMets une valeur avec name=alice, puis récupère-la avec $name pour l'utiliser.
Guillemets — la différence d'expansion entre simples et doubles
Il existe deux sortes de guillemets pour entourer une chaîne, et ils s'expansent différemment.
À l'intérieur des guillemets simples '...', $name est traité littéralement et n'est pas expansé.
À l'intérieur des guillemets doubles "...", $name est remplacé par sa valeur.
Utilise les guillemets doubles quand tu veux glisser une valeur au milieu d'un texte, comme "Hello $name", et les guillemets simples quand tu veux afficher $ tel quel.
Expansion : guillemets simples vs doublesLes guillemets simples affichent $name tel quel ; les doubles le remplacent par la valeur.
name=alice# pas d'espaces autour du =echo"hello $name"# hello alice (les doubles expansent)echo'hello $name'# hello $name (les simples non)echo"path is ${name}/data"# utilise {} pour marquer la limite du nom
Crée un script qui met un nom d'utilisateur dans une variable et montre comment l'affichage change selon les guillemets.
① Ouvre quotes.sh avec vi quotes.sh, appuie sur i pour passer en mode insertion, et écris #!/bin/sh sur la première ligne.
② Dans le script, affecte un nom à une variable, puis affiche une ligne avec des guillemets doubles (« message d'accueil + variable ») et une ligne avec des guillemets simples dans la même forme (tu peux copier ce qu'il faut écrire depuis le panneau de réponse et le coller).
③ Appuie sur Esc, enregistre et quitte avec :wq, puis donne au fichier la permission d'exécution.
④ Exécute le script et vérifie que la ligne en guillemets doubles et celle en guillemets simples s'affichent différemment. (Si l'exécution est correcte, l'explication apparaît.)
Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...
Saisissez une commande puis appuyez sur Entrée
Substitution de commande — $()
$(command) est une façon d'utiliser la sortie d'une commande comme une valeur, là où tu l'écris.
Écris quelque chose comme today=$(date +%Y-%m-%d) et la date que date produit va directement dans today.
Tu l'utilises pour capturer le résultat d'une commande dans une variable ou pour le glisser au milieu d'un texte.
Comment circule la substitution de commande$(date) est remplacé par la sortie de date, et today=$(date) met cette valeur dans la variable.
today=$(date+%Y-%m-%d) # capture la sortie de date dans une variableecho"today is $today"# insère la valeur capturée dans le texteuser=$(whoami) # la sortie d'une autre commande peut aussi être une valeurecho"user: $user"
Crée un script qui capture la sortie d'une commande dans une variable avec la substitution de commande $() et l'insère dans un message.
① Ouvre datestamp.sh avec vi datestamp.sh, appuie sur i pour passer en mode insertion, et écris #!/bin/sh sur la première ligne.
② Dans le script, capture la sortie de date dans une variable avec la substitution de commande $(), puis insère cette variable dans une chaîne en guillemets doubles et affiche-la sur une seule ligne (tu peux copier ce qu'il faut écrire depuis le panneau de réponse et le coller).
③ Appuie sur Esc, enregistre et quitte avec :wq, puis donne au fichier la permission d'exécution.
④ Exécute le script et vérifie qu'un message contenant la date s'affiche.
Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...
Saisissez une commande puis appuyez sur Entrée
Expansion arithmétique — $(( ))
À l'intérieur de $(( )), c'est de l'arithmétique entière.
$(( 3 + 4 )) est remplacé par 7.
Tu peux utiliser + pour additionner, - pour soustraire, * pour multiplier, / pour diviser, et % pour le reste.
Les variables entrent sans $, écrites simplement par leur nom comme $(( n * 2 )).
Comment fonctionne l'expansion arithmétiqueL'expression dans $(( )) est évaluée : $(( 3 + 4 )) vaut 7, et avec n=5, $(( n * 2 )) vaut 10.
echo"sum: $(( 10 + 5 ))"# additionner donne 15n=7echo"double: $(( n*2 ))"# les variables entrent sans $echo"rest: $(( 17 % 5 ))"# le reste avec % vaut 2
Crée un script qui fait de l'arithmétique entière avec l'expansion arithmétique $(( )).
① Ouvre calc.sh avec vi calc.sh, appuie sur i pour passer en mode insertion, et écris #!/bin/sh sur la première ligne.
② Dans le script, affecte deux nombres à des variables, utilise $(( )) pour faire plusieurs calculs comme la somme, le produit et le reste, et affiche les résultats sur une seule ligne (tu peux copier ce qu'il faut écrire depuis le panneau de réponse et le coller).
③ Appuie sur Esc, enregistre et quitte avec :wq, puis donne au fichier la permission d'exécution.
④ Exécute le script et vérifie que les résultats des calculs s'affichent.
Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...
Saisissez une commande puis appuyez sur Entrée
Recevoir une entrée — read
read vlit une ligne d'entrée et la met dans la variable v.
Tu l'utilises quand tu veux demander une valeur à l'utilisateur à l'intérieur d'un script.
Dans la console de ce cours, fournir l'entrée par un pipe, comme printf 'value\n' | ./greet.sh, fonctionne de manière fiable.
Afficher une invite avec echo avant read rend plus clair ce qu'il faut taper.
Recevoir une entrée avec readread n lit une ligne et la met dans n. Passer une valeur par pipe avec printf la livre à read sans la taper à la main.
echo"enter your name:"# demande quoi taperreadwho# lit une ligne dans whoecho"hi, $who"# insère dans le texte la valeur reçueprintf'bob\n' | (readwho; echo"hi, $who") # l'entrée peut aussi venir d'un pipe
Crée un script qui lit une ligne d'entrée avec read et l'insère dans un message d'accueil.
① Ouvre greet.sh avec vi greet.sh, appuie sur i pour passer en mode insertion, et écris #!/bin/sh sur la première ligne.
② Dans le script, affiche une invite avec echo, lis une ligne pour le nom avec read, puis insère ce nom dans un message d'accueil en guillemets doubles et affiche-le (tu peux copier ce qu'il faut écrire depuis le panneau de réponse et le coller).
③ Appuie sur Esc, enregistre et quitte avec :wq, puis donne au fichier la permission d'exécution.
④ Exécute le script avec l'entrée fournie par un pipe, et vérifie qu'un message d'accueil contenant le nom que tu as saisi s'affiche.
Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...
Saisissez une commande puis appuyez sur Entrée
Insérer un comptage dans un message avec la substitution de commande
La substitution de commande $() sert souvent à capturer un « résultat compté », comme un nombre de fichiers, dans une variable.
Écris quelque chose comme n=$(ls *.txt | wc -l) et le résultat combiné de ls et wc -l va dans n.
Insère cette variable dans une chaîne en guillemets doubles et tu peux construire un message lisible d'une seule ligne qui inclut le comptage.
Insérer un comptage dans un messageLe comptage de ls et wc -l va dans n via la substitution de commande, et l'insérer dans le texte affiche txt files: 2.
Crée un script qui prend le nombre de fichiers texte dans une variable avec la substitution de commande et l'affiche inséré dans un message.
① Comme matière à compter, crée un répertoire de travail avec mkdir -p vdemo et crée deux fichiers .txt, comme printf 'a\n' > vdemo/a.txt.
② Ouvre count-txt.sh avec vi count-txt.sh, appuie sur i pour passer en mode insertion, et écris #!/bin/sh sur la première ligne.
③ Dans le script, prends le nombre de fichiers .txt dans vdemo dans une variable avec la substitution de commande, puis insère cette variable dans une chaîne en guillemets doubles et affiche un message avec le comptage (tu peux copier ce qu'il faut écrire depuis le panneau de réponse et le coller).
④ Appuie sur Esc, enregistre avec :wq, donne la permission d'exécution, puis exécute-le et vérifie qu'un message contenant le comptage s'affiche.
Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...
Saisissez une commande puis appuyez sur Entrée
QUIZ
Vérification des connaissances
Répondez à chaque question une par une.
Question 1Quelle est la bonne façon d'affecter à une variable shell ?