Linux — utilisation avancée et administration · Étape 09

Enchaîne les commandes avec statuts et opérateurs

Lis les codes de retour, utilise && et || avec intention, et évite de masquer un échec dans une chaîne de commandes.

Durée indicative · ~1 h 20Niveau débutantPrérequis conseillé · Leçon 8 — umask, ACL et bits spéciauxPratique · TP
L’idée reçue

« Une commande a seulement deux résultats : elle affiche quelque chose ou non. »

Le shell reçoit aussi un entier de statut. Par convention, zéro signifie succès et une valeur non nulle signale un échec ou une condition particulière.

01Observe un succès et un échec

export LAB="/tmp/soria-linux-permissions-$USER"
"$LAB/bin/diagnostic.sh"
printf 'status=%s
' "$?"

status=0
"$LAB/bin/echec.sh" || status=$?
printf 'captured-status=%s
' "$status"

$? contient le statut de la commande la plus récente. Il faut le lire ou le sauvegarder immédiatement.

02Compare les opérateurs

false ; echo 'executed after semicolon'
true && echo 'executed after success'
false && echo 'never executed'
false || echo 'executed after failure'
true || echo 'never executed'
Opérateur
Exécute la suite si…
Usage
;
toujours
séquence indépendante
&&
succès
étape dépendante
||
échec
fallback ou traitement d’erreur

03Évite de masquer une erreur

"$LAB/bin/echec.sh" || echo 'warning handled'
echo "chain-status=$?"

"$LAB/bin/echec.sh" || {
rc=$?
echo "diagnostic failed with rc=$rc" >&2
exit "$rc"
}
Un echo réussi après un échec peut faire terminer la chaîne avec zéro. En automatisation, conserve le code initial si l’erreur doit rester visible.

04Compare groupe et sous-shell

value=initial
{ value=grouped; echo "$value"; }
echo "after-group=$value"

value=initial
( value=subshell; echo "$value" )
echo "after-subshell=$value"

Les accolades exécutent dans le shell courant. Les parenthèses créent un sous-shell dont les changements de variables et de répertoire ne persistent pas.

05Construis une chaîne idempotente

mkdir -p "$LAB/logs" &&
printf 'check=%s
' "$(date -u +%FT%TZ)" >> "$LAB/logs/checks.log" &&
tail -n 1 "$LAB/logs/checks.log"
Challenge autonome

Écris une séquence contrôlée

Vérifie qu’un fichier existe, copie-le seulement si la vérification réussit, affiche une erreur sinon, puis retourne un statut non nul. Ajoute une preuve avec echo $?.

Ce que tu retiens

Les opérateurs du shell pilotent l’exécution à partir des statuts. Une chaîne robuste ne se contente pas d’afficher une erreur : elle conserve un code de retour cohérent pour l’utilisateur, le script ou la CI.

Ta progression

Chargement de l’état… Se connecter pour synchroniser.