Scripts : les codes de retour

$?, 0 pour le succès, exit n, les codes conventionnels (1, 2, 126, 127, 128 plus le numéro du signal), les enchaînements &&, || et ;, et le code d'un tube : prévoir ce qu'affiche une ligne et ne plus annoncer de faux succès.

  • 24 cartes
  • 4 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation

Quelques cartes du deck

  • Code de retour : de quoi s'agit-il ?

    Voir la réponse

    Nombre de 0 à 255 que rend une commande en se terminant : 0 signale le succès, toute autre valeur un échec.

    C'est l'inverse d'un booléen de langage : en shell, 0 est « vrai » pour if et &&, et toute valeur non nulle est « faux ».

  • Qu'affiche cette ligne ?

    ```bash
    false && echo A || echo B ; echo $?
    `

    • B puis 0
    • A puis 0
    • B puis 1
    • A, B puis 0
    Voir la réponse

    B puis 0

    false échoue, donc echo A est ignoré et || lance echo B. $? est le code de ce dernier echo, qui réussit : 0.

  • Une commande introuvable rend le code … ; une commande trouvée mais sans droit d'exécution rend ….

    Voir la réponse

    Une commande introuvable rend le code 127 ; une commande trouvée mais sans droit d'exécution rend 126.

    nom: command not found accompagne 127, Permission denied accompagne 126 lors d'un lancement direct.

  • Variable $? : de quoi s'agit-il ?

    Voir la réponse

    Variable spéciale qui contient le code rendu par la dernière commande terminée, et que la commande suivante remplace aussitôt.

    Après grep -q x f; echo $?, on lit le code de grep. Mais après un echo intermédiaire, $? vaut 0, le code de echo : il faut le copier tout de suite.

  • Pour une sauvegarde, on veut supprimer l'original seulement si la copie a réussi. Quelle ligne convient ?

    • cp f /sauvegarde/ ; rm f
    • cp f /sauvegarde/ || rm f
    • cp f /sauvegarde/ && rm f
    • cp f /sauvegarde/ | rm f
    Voir la réponse

    cp f /sauvegarde/ && rm f

    && n'enchaîne qu'après un succès. Avec ;, l'original disparaît même si la copie échoue ; avec ||, il disparaît seulement si elle échoue ; un tube lance les deux en parallèle.