Scripts : les boucles

for sur une liste, des jokers ou "$@", while et until, while read pour lire un fichier ligne à ligne, break et continue : dérouler une boucle et éviter le piège des noms qui contiennent des espaces.

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

  • Boucle for : de quoi s'agit-il ?

    Voir la réponse

    Boucle qui exécute son corps une fois par mot d'une liste fixée au départ, en rangeant ce mot dans sa variable à chaque tour.

    for i in 1 2 3 fait trois tours ; for i in $(seq 3 6) en fait quatre, avec 3, 4, 5 puis 6.

  • Qu'affiche ce script ?

    ```bash
    i=0
    while [ $i -lt 5 ]; do
    i=$((i + 2))
    done
    echo $i
    `

    • 6
    • 5
    • 4
    • 2, 4 puis 6
    Voir la réponse

    6

    i prend 0, 2, 4 puis 6. La condition n'est testée qu'au début de chaque tour : à 4 elle est vraie, i passe à 6, et au tour suivant elle est fausse.

  • Le corps d'une boucle for est placé entre … et ….

    Voir la réponse

    Le corps d'une boucle for est placé entre do et done.

    do ouvre le corps et done le ferme, pour for, while comme until.

  • Boucles while et until : de quoi s'agit-il ?

    Voir la réponse

    Boucles pilotées par une commande de condition : l'une répète tant qu'elle rend 0, l'autre répète jusqu'à ce qu'elle rende 0.

    while [ $n -gt 0 ] et until [ $n -le 0 ] décrivent la même boucle : seule la formulation de la condition s'inverse.

  • Un script de renommage plante sur « mon rapport.txt », traité comme deux fichiers. Il commence par for f in $(ls *.txt). Quelle correction suffit ?

    • Écrire for f in $(ls -1 *.txt), qui met un nom par ligne
    • Remplacer for par while, qui ne découpe pas les mots
    • Mettre des apostrophes : for f in '$(ls *.txt)'
    • Écrire for f in *.txt et citer "$f" dans le corps de la boucle
    Voir la réponse

    Écrire for f in *.txt et citer "$f" dans le corps de la boucle

    Le découpage vient du résultat de $(ls) relu par le shell. Le joker, lui, fournit les noms entiers. Citer "$f" évite un second découpage dans mv.