Question 1Quelle est la bonne façon d'affecter à une variable shell ?
Variables et substitution de commande — récupérer un résultat avec $(...)
Cet article fait partie du Cours Linux, qui vous permet de maîtriser à partir de zéro des compétences Linux concrètes, des commandes de base jusqu'aux scripts shell.
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.
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.
$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
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.
$(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"
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 )).
$(( )) 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
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.
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
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.
ls et wc -l va dans n via la substitution de commande, et l'insérer dans le texte affiche txt files: 2.Vérification des connaissances
Répondez à chaque question une par une.
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 ?