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.1. notions de base

Syntaxe

Dans un script les lignes de commentaires commencent par le symbole #. La première instruction indique le shell employé. Il est recommandé de ne pas l’omettre car cela peut créer des surprises.

Sa syntaxe est :

# !/bin/bash

ou un autre shell comme /bin/sh : Bourne shell, /bin/csh (C shell), /bin/ksh (Korne shell).

Tous les shells ne sont pas forcément disponibles sur une machine.

Si a désigne une variable $a est sa valeur.

Chaque ligne est interprétée avant d’être exécutée. Lorsqu’une chaîne de caractères est entourée des symboles ‘ ‘ (apostrophe simple) le mécanisme d’interprétation est inhibé. Lorsqu »elle est entourée des symboles " "  (double quote) elle est interprétée puis exécutée.

Par exemple echo $a écrit sur l’écran la valeur de a

echo "$a" fait de même mais echo ‘$a’ écrit les caractères $a.

Une autre façon de procéder est l'usage de \ : le caractère qui le suit perd sa signification symbolique.

rm \$toto efface le fichier de nom $toto, nom qui n'est pas heureux !

Lorsqu’une chaîne de caractères est entourée des symboles ` ` (accent grave) le contenu est récupéré dans stdout puis interprété.

L’ensemble des instructions est rangé dans un fichier appelé script. Il ne faut pas oublier d’en changer les droits d’accès, avant tout usage, pour le rendre exécutable par la commande chmod. En cas d’oubli le système renverrait le message « access denied ».

Déclarations

Dans bash les variables ne sont pas typées. Ceci n'était pas vrai pour les shells précédents. La casse est significative comme toujours sous Unix.

L’affectation de valeur se fait par le signe =. Attention à ne pas ajouter de blancs autour.

  toto=a     $toto est donc le caractère a.

  toto="ceci est une chaine "

Les entiers ne sont reconnus que par la commande let et ne sont nécessaires que pour effectuer des opérations arithmétiques sur ces variables :

   let "nombre=12"

   let  "zozo=13"

  ((resultat=nombre+zozo))

  echo $resultat

On peut déclarer des variables, des constantes c'est-à-dire des valeurs non modifiables en restreignant leur accès à la lecture uniquement, par l'instruction declare :

  declare  –r toto=6

  declare -r toto="ceci est une chaine de caractères"

Pour les nombres entiers declare permet de simplifier l'écriture de certaines opérations sans employer let.

 declare –i nombre

   nombre=3

La notion de tableau existe également. La déclaration se fait en deux temps :

  1. déclaration du type éventuellement
  2. Affectation des valeurs

Ce qui signifie que l'espace nécessaire se réserve au fur et à mesure :

declare –a  tableau

   tableau[0]=1

   tableau[1]=2

   ...

Soyons honnête : tout ceci est assez pénible et en réalité assez peu employé. On se reportera à la bibliographie si nécessaire.

Opérations sur les variables et les constantes

Opérations mathématiques

Les shells ne connaissent que les opérations entières. :

  • Addition                                ((y=7+10))
  • Incrémentation                       ((y++))
  • Soustraction                          ((y=10-3))
  • Multiplication                         ((y=5*6))
  • Division                                 ((y=37/5)). Le résultat sera 7
  • Modulo                                 ((y=37%5)). Le résultat est 2.

Des parenthèses supplémentaires permettent de forcer l'ordre des opérations. L'emploi des doubles parenthèses permet de s'affranchir des déclarations pour les entiers. Cela simplifie considérablement l'écriture d'un script.

Cliquez ici pour en voir un petit exemple.

Opérations sur les bits

  • <<                                        décalage vers la gauche : ((y=2#1011<<2)) donne 101100
  • >>                                        décalage vers la droite : ((y=2#1011>>2)) donne 10
  • &                                          ET logique
  • ^                                           OU exclusive
  • |                                            OU inclusif
  • !                                            exclusion

La syntaxe est celle du langage C.

On remarquera la syntaxe des variables binaires :

  • typeset –i2 y                          binaire
  • typeset –i8 x                          octal
  • typeset –i16 h                        hexadecimal

  2#1010                                           nombre en base 2

  8#234                                             nombre en base 8

  16#a8e                                           nombre en base hexadécimale

Opérations sur les chaînes de caractères

  • ? désigne n'importe quel caractère
  • [abc] a, b ou c
  • [a-e] tous les caractères de a à e.
  • * n'importe quelle chaîne

  car?([a-z]|bohydrate|otte)

correspond à cara, car, cars, carbohydrate et carotte

mais pas à carB, carS, carbonate

Caractères spéciaux

Nous en avons déjà abordé quelques uns. Le tableau suivant mentionne les plus utilisés.

Caractère

Usage

Caractère

Usage

$

Début de valeur : $a

&

et

#

Commentaire

!

exclusion

?

Un caractère quelconque

()

Force l'ordre des remplacements

*

Une chaîne de caractères

;

Fin d'instruction

{}

Eléments d'un tableau :{a, b,c}

`...`

Tous les caractères spéciaux perdent leur signification sauf $ et \

[]

Expansion [a-z]

'...'

Tous les caractères spéciaux perdent leur signification

+

Ajout d'une chaîne de caractères

"..."

Les caractères spéciaux sont interprétés

|

ou

\

Annonce qie le caractère suivant n'est pas spécial

{}, [] et () sont également utilisés dans d'autres contextes.


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