Université Pierre et Marie Curie

Systèmes d'exploitation des ordinateurs

Chapitre 1. Les systèmes d'exploitation
Chapitre 2. Mécanismes d'exécution et de communication
Chapitre 3. Gestion des activités parallèles
Chapitre 4. Gestion des fichiers
Chapitre 5. Partage des ressources
Chapitre 6. Au-dessus du système d'exploitation
6.1. Programmation shell sous Unix
6.1.1. notions de base
6.1.2. Contrôle de flux
6.1.3. Fonctions
6.1.4. Démarrage de session
6.2. Compilateurs
6.3. Fichiers et bases de données
6.4. Sauvegardes et archivage
Chapitre 7. Notions sur les communications
Chapitre 8. Notions sur la sécurité
Bibliographie
Chapitre 9. Exercices et TPs
Examens
Page d'accueilTable des matièresNiveau supérieurPage précédenteBas de la pagePage suivante

6.1.2. Contrôle de flux

Les shells possèdent tous les éléments d'un langage de programmation : tests, boucles, branchements conditionnels

Conditions

Les expressions conditionnelles sont extrêmement variées. Lorsque le test retourne 0 il est considéré comme vrai.

On emploie également la construction [[ expression ]] avec une paire de crochets ouvrants et une paire de crochets fermants entourés de blancs. Cet opérateur appelé commande de test étendue permet des évaluations plus complexes qu'avec [ ] . Par exemple les opérateurs de comparaison &&, >, < fonctionnent avec [[ .. ]], pas avec [ ].

Reconnaissons qu'il existe un certain flou que les meilleurs manuels ne lèvent pas (voir http://www.tldp.org/LDP/abs/html/testconstructs.html) et que seuls des essais peuvent répondre aux questions que l'on se pose.

Enfin on peut employer, en lieu et place d'expressions conditionnelles des expressions arithmétiques. Si elles retournent 0 on continuera le bloc if en séquence. Dans ce cas il faut employer une paire de parenthèses : (( expression arithmétique )) comme nous à propos des opérations mathématiques.

Les opérateurs les plus courants se divisent en plusieurs catégories :

  • Comparaisons
  • == égalité (deux égals)
  • != différent
  • >, <
  •   >=, <=
  • Opérateurs booléens : || ou, && et
  • Tests sur les fichiers :
    •   -e mon_fichier                             existence de mon_fichier
    • -f mon_fichier                              mon_fichier est un fichier
    • -d repert                                     repert est un répertoire
    • -r mon_fichier                              mon_fichier possède le droit de lecture pour le processus qui lance le script
    • -w mon_fichier                            test du droit d'écriture
    • -x mon_fichier                             test du droit d'exécution

Il en existe bien d'autres.

On peut combiner plusieurs tests. Par exemple :

[ ! –f rep ] retourne 0 (vrai) si rep n'est pas un fichier.

if

La syntaxe des tests conditionnels la plus courante est :

    if [ expression conditionnelle ]

       then

      ...  instructions

    fi

Attention à laisser un blanc de chaque coté des crochets [   ].

On utilise également l'expression plus compacte :

    if [ expression conditionnelle ] ; then

      ...  instructions

    fi

où le symbole ; indique que deux instructions sont écrites sur la même ligne.

La syntaxe des tests alternés ou en cascade se déduit aisément :

    if [ expression conditionnelle ] ; then

      ...  instructions

   elif [ expression conditionnelle ] ; then

      ... instructions

   else

     ... instructions

    fi

Branchements : case

L'instruction case permet de comparer la valeur d'une variable à des constantes et d'exécuter des blocs d'instructions correspondantes :

    case $var in

       1)   instruction

             ... instructions ...;;

       3) instruction

            ... instructions...;;

    esac

Si var vaut 1 les instructions qui suivent seront exécutées jusqu'à rencontrer ;;, si var vaut 3 ce sera le deuxième bloc.

Si on avait omis ;; à la fin du premier bloc, le second serait automatiquement enchaîné.

Les constantes peuvent être également littérales :

    case $var in

      "essai")

          ... instructions ...;;

      "run")

         ... instructions;;

      *)

         ... action par défaut;;

     esac

Une série de constantes peut déclencher la même action :

   case 1|2|3) action

      ...;;

Boucles

 On retrouve dans bash les trois boucles connues en langage C : while, for et until. La syntaxe obéit aux mêmes règles que pour if.

  • while [ condition ] ; do
       ... instructions
    done
  • for var in x y z ...; do
        ... instructions
    done

var prendra successivement toutes les valeurs de la série x, y, z.

Par exemple :

   for var in ls  *.c ; do

       mv $var ../src

   done

déplace les fichiers du répertoire où le script est exécuté, d'extension .c dans le répertoire ../src.

  • Until [ expression ] ; do
       ... instructions
    done


Copyright Yves Epelboin, université P.M. Curie, février 2003, MAJ 25 février, 2007

Page d'accueilTable des matièresNiveau supérieurPage précédenteHaut de la pagePage suivante