connectiva penguin bsd logo

Les scripts bash

1_Notre premier script

2_Les variables

3_Les commandes composées    (; | & || && $() {} ``)

4_Ecriture à l'écran / lecture au clavier    (echo read)

5_Le passage de paramètres

6_Les structures conditionnelles    (if then else while until)

7_Les autres structures    (for in do case select)

8_Les fonctions

9_Pour aller plus loin


6_Les structures conditionnelles

généralités

Une structure conditionnelle est une structure dans laquelle on effectue un test. Le script se comportera de façon différente en fonction du résultat du test. On peut aussi réaliser des boucles tant que le test est vrai.

Les tests peuvent porter sur des fichiers (et/ou répertoires), sur des entiers et sur des chaines de caractères. Leur syntaxe n'est pas la même dans tous les cas. On peut aussi faire des combinaisons de tests.

Il existe deux façons de faire les tests : soit entre crochets, soit avec la commande 'test'.

SI [ tests ] ALORS ...
SI test tests ALORS ...

Attention à ne pas oublier l'espace après le premier crochet, et avant le dernier !

Tests sur les fichiers/répertoires

Voici une liste des tests possibles sur les fichiers et/ou répertoires :

Tests sur les entiers
Tests sur les chaines de caractères

Les chaines doivent être entourées par des guillemets.

Les combinaisons de tests

Les combinaisons de tests sont utilisées quand on doit faire plusieurs tests simultanément, c'est à dire, quand on doit répondre à plusieurs conditions.

On utilise les opérateurs && et || comme dans les commandes composées. L'opérateur ! sert à inverser la condition.

structure SI ... ALORS

La syntaxe de cette structure est :

if test; then action-1 action-2 ... action-n; fi

Il faut bien mettre un point-virgule après le test et aprè la dernière action. On termine la structure avec la commande fi.

structure SI ... ALORS ... SINON

La syntaxe est :

if test; then action1; else action2; fi

Si le test est vrai, on exécute l'action1 (ou le groupe d'actions1), sinon, on exécute l'action2 (ou le groupe d'actions2). Bien mettre le point virgule après le test et chaque commande ou groupe de commandes.

structure SI ... ALORS ... SINON SI ... ALORS ... SINON

syntaxe :

if test1; then action1; elif test2; then action2; else action3; fi

Si test1 est vrai, on exécute l'action1, sinon, si test2 est vrai, on exécute l'action2, sinon, on exécute l'action3. Bien mettre le point virgule après chaque test et chaque commande ou groupe de commandes.

On peut avoir autant de 'elif' qu'on veut. Voyons un exemple d'utilisation de cette structure :

#!/bin/bash
echo -n "Entrez un nombre entier : " ; read nombre
if [ $nombre -lt 0 ]; then
  echo "$nombre est negatif";
elif [ $nombre -gt 0 ]; then
  echo "$nombre est positif";
else
  echo "$nombre est egal a zero";
fi

Et voilà le résultat :

$ ./test.sh
Entrez un nombre entier : 12
12 est positif

$ ./test.sh
Entrez un nombre entier : -5
-5 est negatif

$ ./test.sh
Entrez un nombre entier : 0
0 est egal a zero
structure TANT QUE ... FAIRE

Il existe deux commandes pour faire ça : while et until. While va répéter la boucle tant que le test est vrai. Until va répéter la boucle jusqu'à ce que le test soit vrai.

La syntaxe des deux commandes est :

while test; do action1 action2; done
until test; do action1 action2; done

Comme avec les structures précédentes, on met un point-virgule après le test et après le groupe d'actions.

Il arrive très souvant, en programmation, qu'on veuille répéter une opération un certain nombre de fois. Dans ce cas, on utilise un entier qui va nous servir de compteur. Pour incrémenter ce compteur, on utilise la commande let suivie de l'opération à effectuer, selon la syntaxe suivante :

let $[ commande ]

Voici un exemple très simple, qui affiche les nombres de 1 à 10.

#!/bin/bash
i=1 # on initialise le compteur
while [ $i -le 10 ]; do
  echo $i
  let $[ i+=1 ] # incremente i de 1 a chaque boucle
done

Et on obtient :

./test.sh
1
2
3
4
5
6
7
8
9
10

L'instruction "i+=1" sert à incrémenter i de 1. C'est une syntaxe employée dans de nombreux langage, mais qui n'est peut-être pas claire pour le débutant. On peut la remplacer par "i=$i+1", ce qui nous donne "let $[ i=$i+1 ]". Celle-ci est plus facilement compréhensible.

<< page précédente
5_Le passage de paramètres
page suivante >>
7_Les autres structures

Valid XHTML 1.1

logo firefox logo ubuntu logo debian logo mandriva logo gimp