Apprenez en lisant dans l'ordre

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.

Utiliser des variables — affecter et référencer

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érence
name=alicename reçoit la valeurecho "$name"$name remplacé par la valeuraffiche aliceaffectationréférence
Mets 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 doubles
echo '$name'affiche $name (pas d'expansion)echo "$name"affiche alice (expansé)
Les 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...

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)2026-06-18today=$(date)remplacé par la sortietoday=2026-06-18exécute datesubstitution de commandeaffectation
$(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 variable
echo "today is $today"           # insère la valeur capturée dans le texte
user=$(whoami)                   # la sortie d'une autre commande peut aussi être une valeur
echo "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...

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étique
$(( 3 + 4 ))évaluer= 7n=5$(( n * 2 ))= 10
L'expression dans $(( )) est évaluée : $(( 3 + 4 )) vaut 7, et avec n=5, $(( n * 2 )) vaut 10.
echo "sum: $(( 10 + 5 ))"        # additionner donne 15
n=7
echo "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...

Recevoir une entrée — read

read v lit 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 read
echo "enter:"afficher l'inviteattendre l'entréepasser une valeur par piperead nn=7
read 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 taper
read who                         # lit une ligne dans who
echo "hi, $who"                  # insère dans le texte la valeur reçue
printf 'bob\n' | (read who; 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...

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 message
ls vdemo/*.txtcomptage = 2n=$( ... )insère $n dans le textetxt files: 2compte avec wc -lles compterinsérer dans le message
Le 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...
QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Quelle est la bonne façon d'affecter à une variable shell ?

Question 2Comment echo '$name' s'affiche-t-il (quand name=alice) ?

Question 3Quelle façon met la sortie d'une commande dans une variable comme valeur ?