12/17/2019
9. Les boucles
Elles permettent la répétition d’un bloc de
commandes soit un nombre limité de fois, soit
conditionnellement.
Toutes les commandes à exécuter dans une
boucle se placent entre les commandes do et
done.
9. Les boucles
a. Boucle for
La boucle for ne se base pas sur une quelconque
incrémentation de valeur mais sur une liste de
valeurs, de fichiers ...
for var in liste
do
commandes à exécuter
done
La liste représente un certain nombre d’éléments
qui seront successivement attribués à var.
1
12/17/2019
Exercice:
Créer un script qui prend un nombre en saisie et l'élève à sa propre
puissance, l'usage de la boucle for est imposé.
#!/bin/bash
echo "Saisir une valeur"
read value
result=1
for (( i=0 ; i<$value ; i++ )); do
let result=$result*$value
done
echo "$value^$value = $result"
123
Exercice:
Que fait le script suivant??
For file in /home/stage/*
Do
Cp $file /tmp
Done
124
2
12/17/2019
Exercice:
Créer un script permettant d'afficher la liste des fichiers du
répertoire /etc accessibles en lecture.
Créer un script permettant d'afficher la liste des fichiers du
répertoire /etc accessibles en écriture
125
Exercice:
for FILE in /etc/*
do
if test -r $FILE
then
echo $FILE
fi
done
for FILE in /etc/*
do
if test -w $FILE
then
echo $FILE
fi 126
done
3
12/17/2019
b. Boucle while:
La commande while permet une boucle conditionnelle « tant que ».
Tant que la condition est réalisée, le bloc de
commande est exécuté. On sort si la condition n’est plus valable.
Syntaxe:
While condition
Do
….
….
Done
127
b. Boucle while:
La commande while permet une boucle conditionnelle « tant que ».
Tant que la condition est réalisée, le bloc de
commande est exécuté. On sort si la condition n’est plus valable.
Exemple:
Supposons, par exemple que vous souhaitiez afficher les 100
premiers nombres (pour une obscure raison)
#!/bin/bash
# script7.sh boucle while
i=0 ;
while [ $i -lt 100 ]
do
i=$[$i+1]
done
128
4
12/17/2019
b. Boucle while:
La commande while permet une boucle conditionnelle « tant que ».
Tant que la condition est réalisée, le bloc de
commande est exécuté. On sort si la condition n’est plus valable.
Exemple:
#!/bin/bash
i=0
While [ ’’ $i ’’–lt 3 ]
Do
echo $i
((i++))
done
#!/bin/bash
For i in 0 1 2
Do
echo $i
done 129
le code suivant ne permet pas de calculer le nombre de
lignes du fichier
#!/bin/bash
j=1
cat toto|while read ligne
do
((j++))
done
echo "$j ligne dans toto"
130
5
12/17/2019
b. Boucle while:
Explications :
la commande cat fichier va envoyer le contenu du fichier vers la
sortie standard.
Ici, un tube | (ou pipe en anglais) permet de re diriger les données
destinées à la sortie standard (i.e. Le résultats de cat fichier) vers
l'entrée standard de la commande suivante.
La commande suivante est ici une boucle while, qui lit sur son entrée
standard grace à la commande read. Read lit ligne par ligne. A chaque
itération de la boucle while, une nouvelle ligne est copiée dans la
variable ligne.
A la fin du fichier, la commande cat vas envoyer un signal « End Of
File » vers la sortie standard. Ce signal, est alors capté par la
commande read qui retourne alors la valeur 1, ce qui rend négatif le
test effectuer par l'opérateur while. (essayer read puis CTRL+D puis
echo $?) 131
b. Boucle while:
read puis CTRL+D puis echo
on peut compter le nombre de lignes
$?)
du fichier essai.txt précédent par :
i=0
while read ligne
do
i=$((i+1))
done < essai.txt
echo $i
132
6
12/17/2019
b. Boucle until:
La commande until permet une boucle conditionnelle « jusqu’à ».
Dès que la condition est réalisée, on sort de la boucle.
until condition
do
commandes
done
ou :
until
bloc d’instructions formant la condition
do
commandes
done
133
Répète les commandes jusqu'à ce que la condition soit vraie
soit tant qu'elle est fausse.
•Rupture avec break,
•Reprise avec continue.
while true; do commandes; done
134
7
12/17/2019
135
136
8
12/17/2019
Programmation shell
2. Arguments d’un script
a. Paramètres de position
Les paramètres de position sont aussi des
variables spéciales utilisées lors d’un passage
de paramètres à un script.
Programmation shell
2. Arguments d’un script
Liste de variables prépositionnées¶
•$0 : nom du script. Plus précisément, il s'agit du paramètre 0 de la ligne de commande, équivalent
de argv[0]
•$1, $2, ..., $9 : respectivement premier, deuxième, ..., neuvième paramètre de la ligne de
commande
•$* : tous les paramètres vus comme un seul mot
•$@ : tous les paramètres vus comme des mots séparés : "@"équivautà"@"équivautà"1" "$2" ...
•$# : nombre de paramètres sur la ligne de commande
•$- : options du shell
•$? : code de retour de la dernière commande
•\$\$ : PID du shell
•$! : PID du dernier processus lancé en arrière-plan
•$_ : dernier argument de la commande précédente
9
12/17/2019
Programmation shell
2. Arguments d’un script
10