Les boucles dans bash

Sommaire

Index

for … do … done

for-each (for ... in ... do ... done)

$ for valeur in 1 2 3 4 ; do echo $valeur ; done
1
2
3
4

Sur des noms de fichier

$ for fichier in *.txt ; do file $fichier ; done

Exercice 2

Écrire un programme nommé convertir_tout qui:

  1. Récupère la liste de tous les fichiers .md présents dans le dossier courant
  2. exécute la commande pandoc permettant de générer un fichier html à partir de ce fichier avec le suffixe html

Sur des noms de fichiers avec espaces

#!/bin/bash

IFS=$'\b\n'

for valeur in $(ls -d *)
do
    echo file "$valeur"
done

Recherche

#!/bin/bash

IFS=$'\b\n'

for fichier in $(find . -name '*.txt')
do
    echo "fichier=$fichier"
done

Exercice 3

Écrire un programme nommé convertir_sous_dossiers qui:

  1. Récupère la liste de tous les fichiers .md présents dans le dossier courant et ses sous-dossiers en gérant les noms de fichiers avec espaces
  2. exécute la commande pandoc permettant de générer un fichier html à partir de ce fichier avec le suffixe html

Plage de valeurs

$ for i in {1..10} ; do echo $i ; done
1
2
3
4
5
6
7
8
9
10

Plages de valeurs avec pas différent de 1

$ for i in {1..10..2} ; do echo $i ; done
1
3
5
7
9

Boucle for (condition initiale, de sortie, mise à jour)

$ for (( i=0 ; i<9 ; i=i+1  )) ; do echo $i ; done
0
1
2
3
4
5
6
7
8

Avec une condition d’égalité

$ for (( i=0 ; i==0 ; i=i+1  )) ; do echo $i ; done
0

Boucle while

$ echo $i
9
$ while (( i >= 0 )) ; do echo $i ; (( i-- )) ; done
9
8
7
6
5
4
3
2
1
0

Expressions arithmétiques

$ i--
-bash: i--: command not found
$ ((i--))
$ echo $i
-2