Scripts : tests et conditions

if, elif, else et fi, la commande test et sa forme [ ], les tests de fichiers, de chaînes et de nombres, les opérateurs &&, || et !, et case : choisir la branche qu'un script exécute et repérer un test mal écrit.

  • 27 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

  • Commande test : de quoi s'agit-il ?

    Voir la réponse

    Commande qui évalue une condition sans rien afficher et répond par son code de retour : 0 si elle est vraie, 1 si elle est fausse. Elle s'écrit aussi entre crochets.

    [ est une vraie commande : les espaces autour des crochets sont obligatoires, et [-f x ] donne [-f: command not found.

  • Ce script est lancé par ./age.sh 18. Qu'affiche-t-il ?

    ```bash
    age=$1
    if [ "$age" -gt 18 ]; then
    echo majeur
    elif [ "$age" -ge 12 ]; then
    echo ado
    else
    echo enfant
    fi
    `

    • ado
    • majeur
    • enfant
    • ado puis enfant
    Voir la réponse

    ado

    -gt est strict : 18 n'est pas supérieur à 18, la première branche est écartée. -ge 12 est vrai, et seule cette branche s'exécute.

  • Une structure if se poursuit par … après la condition et se termine par … ; la branche facultative else se place avant ce dernier mot.

    Voir la réponse

    Une structure if se poursuit par then après la condition et se termine par fi ; la branche facultative else se place avant ce dernier mot.

    fi est if lu à l'envers, comme esac pour case.

  • Structure if : de quoi s'agit-il ?

    Voir la réponse

    Instruction qui essaie ses conditions dans l'ordre et exécute seulement la première branche dont la commande de condition rend le code 0, ou sinon sa branche par défaut si elle en a une.

    Le test n'est pas un booléen mais une commande quelconque : if grep -q motif f; then fonctionne sans aucun crochet.

  • Le script de sauvegarde ne doit continuer que si le fichier $1 existe et si on lui a donné exactement 2 arguments. Quel test convient ?

    • [ -f "$1" ] || [ $# -eq 2 ]
    • [ -f "$1" ] && [ $# -ge 2 ]
    • [ -d "$1" ] && [ $# -eq 2 ]
    • [ -f "$1" ] && [ $# -eq 2 ]
    Voir la réponse

    [ -f "$1" ] && [ $# -eq 2 ]

    Deux conditions à satisfaire ensemble se relient par && ; || accepterait l'une sans l'autre. -f vérifie le fichier ordinaire (-d exigerait un répertoire) et -eq 2 demande exactement deux arguments, là où -ge 2 en accepterait trois.