Apprenez en lisant dans l'ordre

Enchaîner les commandes — ; && || et les guillemets

Apprends l'exécution séquentielle avec ;, l'exécution conditionnelle avec && (en cas de succès) et || (en cas d'échec), et la différence entre guillemets simples et doubles pour l'expansion des variables — tout en pratique dans un terminal en navigateur.

Enchaîner les commandes — ; && ||

Tu peux enchaîner plusieurs commandes sur une seule ligne.

; les lance l'une après l'autre, peu importe le résultat de la précédente.

&& ne lance la commande suivante que si la précédente a réussi, et || ne lance la suivante que si la précédente a échoué.

SymboleLance la suivante quandExemple
;Toujours, peu importe le résultatecho a ; echo b
&&Seulement si la précédente a réussi (code de sortie 0)mkdir d && cd d
||Seulement si la précédente a échoué (code non nul)cat f || echo ng
Comment ; && || diffèrent
echo A ; echo Blance A et Bdans tous les cascmd && echo okok seulement sicmd réussitcmd || echo ngng seulement sicmd échoue
; lance toujours en séquence, && lance la suite en cas de succès, et || lance la suite en cas d'échec.
echo step1 ; echo step2          # lance les deux dans l'ordre
mkdir build && echo created      # created si ça réussit
ls missing.txt || echo not-found # not-found si ça échoue

① Lance echo first; echo second et confirme que ; affiche les deux sorties dans l'ordre.

② Lance echo ok && echo done et confirme que && passe à la suivante quand la précédente réussit.

③ Lance cat nofile.txt || echo missing et confirme que || ne lance la partie de droite que lorsque la précédente échoue. (Lance-le correctement et une explication apparaîtra.)

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...

Combiner && et || — brancher en ligne

Tu peux écrire && et || l'un après l'autre sur une ligne.

cmd && echo ok || echo ng lance echo ok si cmd réussit, et echo ng si elle échoue.

C'est la forme de référence quand tu veux écrire au même endroit l'action de succès et celle d'échec.

Brancher en combinant && et ||
cmdbranche selonle code de sortie&& echo okok si cmd réussit|| echo ngng si la précédentea échoué
cmd && echo ok || echo ng affiche ok si cmd réussit, ou ng si elle échoue.
mkdir out && echo created || echo failed   # created en cas de succès
ls nofile.txt && echo found || echo none   # none en cas d'échec

① Lance ls . && echo found || echo none et confirme que found apparaît parce que ls . réussit.

② Lance cat nofile.txt && echo found || echo none et confirme que none apparaît parce que cat échoue.

③ Compare les deux résultats et observe comment la partie après && et celle après || basculent selon le succès ou l'échec.

Linux console
0 / 2 exécutée(s)
Loading Linux Terminal...

La différence entre les guillemets — ' et "

Il existe deux sortes de guillemets pour entourer une chaîne.

Les guillemets simples '...' traitent le contenu comme des caractères littéraux et ne remplacent pas $VAR.

Les guillemets doubles "..." étendent $VAR et $(...) à l'intérieur en leur valeur.

Ils servent aussi à passer comme un seul bloc une chaîne contenant des espaces.

Guillemet$VAR$(...)Exemple → sortie
'...' (simples)Non étendu (littéral)Non étenduecho '$name'$name
"..." (doubles)Étendu à sa valeurÉtendu à la sortie de la commandeecho "$name"Linux
Expansion : simples vs doubles
name=Linuxdéfinit name à Linuxecho '$name'affiche $namelittéralementecho "$name"étend à Linux
Les guillemets simples restent littéraux ; les doubles étendent $variable à sa valeur.
place=server
echo 'path is $place'   # littéral : path is $place
echo "path is $place"   # étendu : path is server

① Définis une variable avec name=Linux.

② Lance echo '$name' et confirme que les guillemets simples affichent $name littéralement.

③ Lance echo "$name" et confirme que les guillemets doubles l'étendent à la valeur Linux.

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...

Intégrer variables et sortie de commande dans des guillemets doubles

À l'intérieur de guillemets doubles, tu peux construire une seule chaîne à partir de variables et de substitution de commande à la fois.

$(...) est remplacé par la sortie de la commande.

Par exemple, $(pwd) est remplacé par le chemin de ta position actuelle avant d'être affiché.

Entourer de guillemets doubles est aussi la façon de base pour passer comme un seul argument une valeur contenant des espaces.

① Définis une variable avec user=guest.

② Lance echo "hello $user" && echo done et confirme que la variable est étendue dans les guillemets doubles et que done suit en cas de succès.

③ Lance echo "now: $(pwd)" et confirme que le $(...) dans les guillemets doubles est remplacé par le chemin actuel.

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...

Ce que sont vraiment succès et échec — code de sortie et echo $?

Le « succès ou échec » que && et || surveillent est déterminé par un nombre appelé code de sortie, que la commande laisse en se terminant.

0 signifie succès et tout ce qui est différent de 0 signifie échec.

Le code de sortie de la commande précédente va dans la variable spéciale $?, que tu peux consulter avec echo $?.

Code de sortieSignificationVérification
0La commande précédente a réussiecho $? affiche 0
non nulLa commande précédente a échouéecho $? affiche 1, etc.
Lire le code de sortie avec echo $?
ls . puis echo $?0 (succès)cat nofile puis echo $?non nul (échec)
Juste après une commande qui réussit, echo $? vaut 0 ; juste après une qui échoue, il est non nul.
ls .            # une commande qui réussit
echo $?         # code de sortie précédent -> 0
cat nofile.txt  # une commande qui échoue
echo $?         # code de sortie précédent -> non nul (ex. 1)

① Lance ls . puis echo $?, et confirme qu'il affiche 0 parce que ça a réussi.

② Lance cat nofile.txt puis echo $?, et confirme qu'il affiche un nombre non nul (comme 1) parce que ça a échoué.

③ Remarque que le nombre de echo $? est ce sur quoi && et || fondent leur décision.

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...
QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Quand cmd2 se lance-t-elle dans cmd1 && cmd2 ?

Question 2Qu'affiche echo '$name' ? (en supposant que name=Linux est défini)

Question 3Quelle affirmation est correcte au sujet du rôle de || ?