Boucle for
Syntaxe :
La boucle for permet de traiter une liste de valeurs indiquée à droite du mot clé in.
A chaque tour de boucle, la variable var est initialisée avec une des valeurs de la liste.
Elles sont traitées dans l'ordre de leur énumération.
Liste de valeurs citée directement
for var in valeur1 valeur2 valeur3 ... valeurn
do
commande
done
Liste de valeurs contenue dans une variable
for var in $variable
do
commande
done
Liste de valeurs générée par substitution de commande
for var in `commande`
do
commande
done
Liste de valeurs générée par substitution de caractères de génération de noms de fichiers
for var in *.ext
do
commande
done
Liste par défaut : Arguments de la ligne de commande
for var
do
commande
done
for var in $*
do
commande
done
Avec incrémentation d'une variable
for (( var=valeurMin; var<=valeurMax; var++ ))
do
commande
done
Exemple :
Un script compte à rebours
$ nl boucleFor01.sh
1 #!/bin/bash
2 for var in 10 9 8 7 6 5 4 3 2 1 0
3 do
4 echo "$var"
5 done
6 exit 0
$ ./boucleFor01.sh
10
9
8
7
6
5
...
$
Lister les fichiers d'un ou plusieurs dossiers
$ nl boucleFor02.sh
1 #!/bin/bash
2 if [[ $# -lt 1 ]]
3 then
4 echo "Nombre d'argument incorrect"
5 echo "Utilisation $0 dossier1 dossier2 dossiern"
6 exit 1
7 fi
8 for dossier in $*
9 do
10 if [[ -d $dossier ]]
11 then
12 echo "Liste des fichiers du dossier $dossier"
13 for fichier in `ls $dossier`
14 do
15 echo "$fichier"
16 done
17 fi
18 done
19 exit 0
$ ./boucleFor02.sh coucou 24902 25013 25031
Liste des fichiers du dossier coucou
test
Liste des fichiers du dossier 24902
fichier_0
fichier_1
fichier_2
fichier_3
Liste des fichiers du dossier 25013
fichier_0
fichier_1
fichier_2
Liste des fichiers du dossier 25031
fichier_0
fichier_1
fichier_2
fichier_3
$
En utilisant une variable incrémentée :
$ for (( i=0; i <= 10; i++ )); do echo $i; done
0
1
2
3
4
5
6
7
8
9
10
$
Idem avec la syntaxe suivante :
$ for i in {0..10}; do echo $i; done
0
1
2
3
4
5
6
7
8
9
10
$
Commentaires
Alarc'h (non vérifié)
jeu, 25/06/2020 - 15:48
Permalien
simplification d'une boucle d'incrémentation
pour une incrémentation il existe la commande seq.
for i in `seq 1 10`; do
echo "on traite $i";
done
ronan
jeu, 25/06/2020 - 16:27
Permalien
Tout à fait
J'en parle dans cet article
xavier (non vérifié)
mer, 12/08/2020 - 13:44
Permalien
variable et changement de répertoire
Bonjour,
Je suis grand débutant en shell et j'essaye de faire la chose suivante:
J'ai des répertoires nommés à la date du jour (YYYYMMDD)
Je souhaite faire un script qui vérifie l'existence du répertoire du jour, et si oui, exécute des opérations sur les fichiers de ce répertoire.
Par étape je procéde ainsi:
1) mise en variable de la date
jour='date +%Y%m%d'
2) comme je ne parviens pas a utiliser la valeur de la variable (find -type d |grep -f $jour
grep: date: No such file or directory
)
, je l'inscris dans un fichier pour réutilisation
$jour > repertoirejour
3) A parti de la je vérifie que le dossier existe.
find -type d |grep -f repertoiredujour
4) comment puis-je définir un chemin en partant de la variable ou du fichier contenant la valeur de la variable?
Dans l'idée ca serait par exemple: cd /$jour pour pouvoir pointer sur le repertoire du jour.
Je ne suis probablement pas au bon endroit pour ce post, si vous pouviez m'orienter j'apprécierai beaucoup.
Merci d'avance.
ronan
mer, 12/08/2020 - 14:53
Permalien
Bonjour,
Bonjour,
Peut-être pourrais tu faire de cette manière (un début de piste)
Bon courage pour la suite
Ajouter un commentaire