0% ont trouvé ce document utile (0 vote)
20 vues35 pages

10SE

Transféré par

Yassine Ait oumghar
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
20 vues35 pages

10SE

Transféré par

Yassine Ait oumghar
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Systèmes d’exploitation I

Module: M3 - INF-S3 & IAP-S3

Prof. R. HANNANE
[Link]@[Link]

Faculté des Sciences Semlalia, Marrakech


Université Cadi Ayyad

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 1/35 1 / 35


Programmation Shell

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 2/35 2 / 35


Programmation Shell

Introduction
Pourquoi la programmation Shell ?

Aucun langage de programmation n’est parfait

Il n’existe pas un langage meilleur que d’autre


⇒ Il n’y a que des langages en adéquation ou peu conseillés
pour des buts particuliers

Une connaissance fonctionnelle de la programmation shell


est essentielle à quiconque souhaite devenir efficace en
administration de système

Pensez qu’au démarrage de la machine Linux, des scripts


shell du répertoire /etc/rc.d sont exécutés pour restaurer
la configuration du système et permettre la mise en
fonctionnement des services
Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 3/35 3 / 35
Programmation Shell

Introduction
Pourquoi la programmation Shell ?

Une compréhension détaillée de ces scripts de démarrage


est importante pour analyser le comportement d’un
système, et éventuellement le modifier
Ecrire des scripts shell n’est pas difficile à apprendre:
I Les scripts peuvent être construits par petites sections
I Il n’y a qu’un assez petit nombre d’opérateurs et d’options
spécifiques au shell à connaı̂tre
I Il n’existe que peu de règles à apprendre
La syntaxe est simple et directe, similaire à une suite d’appels
de différents utilitaires en ligne de commande
La plupart des petits scripts fonctionnent du premier coup
et le débogage, même des plus longs, est assez simple
Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 4/35 4 / 35
Programmation Shell

Introduction
C’est quoi un script shell?

Un script shell est une méthode ”rapide”pour prototyper


une application complexe

Avoir même un sous-ensemble limité de fonctionnalités


dans un script shell est souvent une première étape utile
lors d’un projet de développement
⇒ La structure de l’application peut être testée

La programmation shell ramène à la philosophie classique


des UNIX⇒ Casser des projets complexes en sous-tâches
plus simples et assembler des composants et des utilitaires

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 5/35 5 / 35


Programmation Shell

Quand ne pas utiliser les scripts shell?(1/2)


Ne pas utiliser les scripts shell:
1 Pour des tâches demandant beaucoup de ressources et
particulièrement lorsque la rapidité est un facteur (tri, hachage, etc.)
2 Pour des procédures impliquant des opérations mathématiques
nombreuses et complexes, spécialement pour de l’arithmétique à
virgule flottante, des calculs à précision arbitraire ou des nombres
complexes (optez plutôt pour le C++ ou le FORTRAN dans ce cas)
3 Pour une portabilité inter-plateformes (utilisez le C ou Java à la
place)
4 Pour des applications complexes où une programmation structurée
est nécessaire (typage de variables, prototypage de fonctions, etc.)
5 Pour des applications critiques sur lesquelles vous misez votre avenir
ou celui de la société
6 Pour des situations où la sécurité est importante, où vous avez
besoin de garantir l’intégrité de votre système et de vous protéger contre
les intrusions et le vandalisme

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 6/35 6 / 35


Programmation Shell

Quand ne pas utiliser les scripts shell?(2/2)


7 Pour des projets consistant en de nombreux composants avec des
dépendances inter-verrouillées
8 Lorsque des opérations importantes sur des fichiers sont requises
(Bash est limité à un accès fichier en série, ligne par ligne, ce qui est
particulièrement maladroit et inefficace)
9 Si le support natif des tableaux multidimensionnels est nécessaire
10 Si vous avez besoin de structures de données, telles que des listes
chaı̂nées ou des arbres
11 Si vous avez besoin de générer ou de manipuler des graphiques ou
une interface utilisateur (GUI) lorsqu’un accès direct au matériel est
nécessaire ;
12 Lorsque vous avez besoin d’accéder à un port, à une socket
d’entrée/sortie
13 Si vous avez besoin d’utiliser des bibliothèques ou une interface
propriétaire
14 Pour des applications propriétaires, à sources fermées (les sources
des shells sont forcément visibles par tout le monde)
Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 7/35 7 / 35
Programmation Shell

Les différents shells


Il existe plusieurs shell :
I sh : Bourne Shell. L’ancêtre de tous les shells
I bash: Bourne Again Shell, version améliorée du shell
Bourne sous Unix, disponible par défaut sous Linux et Mac
OS X
I ksh : Korn Shell. Un shell puissant assez présent sur les
Unix propriétaires, mais aussi disponible en version libre,
compatible avec bash
I csh : C Shell. Un shell utilisant une syntaxe proche du
langage C
I tcsh : Tenex C Shell. Amélioration du C Shell
I zsh : Z Shell. Shell assez récent reprenant les meilleures
idées de bash ksh et tcsh
Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 8/35 8 / 35
Programmation Shell

Les différents shells

Note:
Les fonctionnalités offertes par l’invite de commandes
peuvent varier en fonction du shell que l’on utilise(sh,
bash,ksh,zsh,...)

Pour connaı̂tre le shell sous lequel on travaille, on tape :


> echo $SHELL

⇒ Exemple d’affichage: /bin/bash

Pour changer le shell, on utilise la commande: chsh

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 9/35 9 / 35


Programmation Shell

Exemple
Le script suivant a pour nom Bonjour :
#!/bin/bash
# afficher un message
echo ”Bonjour, c’est mon premier script”

A part la première ligne, les lignes commençant par le caractère


# sont des commentaires (des textes qui doivent aider à
comprendre ce que fait un programme)
Ces lignes ne sont pas interprétées par le shell
La première ligne d’un script doit toujours indiquer le shell qui
doit être utilisé pour l’interpréter
Par exemple, pour le bash, la première ligne d’un script doit être:
#!/bin/bash

Il est nécessaire de donner l’adresse absolue du shell, à partir


de la racine
Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 10/35 10 / 35
Programmation Shell

Exécution d’un script shell


Avant de lancer un script shell, il faut s’assurer qu’il est
exécutable ⇒ On affecte simplement le droit d’exécution par la
commande :
> chmod + x nomScript

Pour l’exécution du script :


> ./ nomScript

ou simplement :
> nomScript

Pour des raisons de sécurité, le répertoire courant (./)


n’est pas inclus par défaut dans le $PATH de l’utilisateur
⇒ Avant tout, il faut s’assurer que la variable PATH de votre
machine, contient la référence au répertoire courant
Pour changer la variable PATH :
> PATH = \ $PATH :.
Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 11/35 11 / 35
Programmation Shell

Exécution d’un script shell

Exemple:
> chmod + x Bonjour
> ./ Bonjour
Bonjour , c est mon premier script

Enfin, après les tests et le débogage final, déplacer le


script dans /usr/local/bin (en tant que root), pour le rendre
utilisable par tous les autres utilisateurs du système

Le script pourra alors être appelé en tapant simplement


nomScript sur la ligne de commande

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 12/35 12 / 35


Programmation Shell

Débogage d’un script shell

Pour déboguer un script shell bash soit:


I Sur l’invite de commande, utiliser:
bash -x nomScript

I Dans le script shell, utiliser les deux commandes suivantes:


set -x # activer le mode débogage
... d’autres lignes de commandes
set +x # désactiver le mode débogage

I Dans la ligne Shebang standard du script shell, remplacer


#!/bin/bash par #!/bin/bash -xv

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 13/35 13 / 35


Programmation Shell

Les variables internes


Le shell reconnaı̂t de nombreuses variables. Voici quelques unes des variables
d’environnement du bash
I HOSTNAME : Contient le nom de la machine
> echo $HOSTNAME
I HOSTTYPE : Type de la machine
> echo $ HOSTTYPE
I LANG : Définit la langue utilisée par la machine (fomat de l’affichage de la date)
> echo $LANG
I PATH : Indique les chemins de recherche pour les commandes à exécuter
> echo $PATH
I PPID : Donne le numéro du processus parent du shell. Le numéro du processu
courant est accessible via le paramétre $
> echo $PPID
I RANDOM : Donne un entier aléatoire
I MAILMSG : message d’alerte à l’arrivé d’un courrier

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 14/35 14 / 35


Programmation Shell

Les paramètres

Il est possible de faire passer plusieurs paramètres à un


script

Les paramètres sont placés à la suite du nom du script, et


séparés par des espaces, comme pour une commande standard

A l’intérieur du script, la valeur de ces paramètres est


récupérée grâce aux variables ’1’ à ’9’

Par exemple, la ligne :


> echo $3
Renverra la valeur du troisième paramètre si il existe, rien
sinon

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 15/35 15 / 35


Programmation Shell

Les paramètres

Autre :
I $0 : Contient le nom du script tel qu’il a été invoqué
I $* : L’ensemble des paramètres sous la forme d’un seul
argument
I $@ : L’ensemble des arguments, un argument par
paramètre
I $# : Le nombre de paramètres passés au script
I $$ : Le PID du shell qui exécute le script
I $! : Le PID du dernier processus lancé en arrière-plan
I $? : Le code retour de la dernière commande

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 16/35 16 / 35


Programmation Shell

Les paramètres

Exemple :
Soit le script qui porte le nom essai :

#!/bin/bash
echo "La commande $0 a $# arguments"
echo ’$1= ’$1
echo ’$2= ’$2
echo ’$*= ’$*
shift
echo "Maintenant il y a $# arguments"
echo ’$1= ’$1

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 17/35 17 / 35


Programmation Shell

Les paramètres
Exécutons ce script :
> ./essai alpha beta gamma # a 3 arguments

Résultat :
La commande ./essai a 3 arguments
$1=alpha
$2=beta
$*=alpha beta gamma
Maintenant il y a 2 arguments
$1 = beta

Note:
La fonction shift permet de décaler la liste des
paramètres d’un cran vers la gauche
Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 18/35 18 / 35
Programmation Shell

Code de retour d’une commande

Le code de retour d’une commande est un mécanisme


fourni par le shell (quel qu’il soit) qui signale à
l’utilisateur si l’exécution de cette commande s’est bien
déroulée ou bien s’il y a eu un problème quelconque

Le code de retour est un petit entier positif ou nul, toujours


compris entre 0 et 255

Par convention, un code de retour égal à 0 signifie que la


commande s’est exécutée correctement

Un code différent de 0 signifie soit une erreur d’exécution,


soit une erreur syntaxique

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 19/35 19 / 35


Programmation Shell

Code de retour d’une commande

Exemple :
> pwd
/home/abdessamad
> echo $?
0

⇒ la commande s’est exécutée correctement


> ls -l vi
ls:vi: Aucun fichier ou répertoire de ce type
> echo $?
2
⇒ erreur d’exécution !

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 20/35 20 / 35


Programmation Shell

La commande test
La commande test, comme son nom l’indique, permet
d’effectuer différents tests sur des fichiers, des répertoires
ou des expressions arithmétiques

Elle s’utilise en association avec if, while et until pour


évaluer le résultat vrai ou faux d’une expression
-r fichier : vrai si le fichier existe et est accessible en
lecture
-w fichier : vrai si le fichier existe et est accessible en
écriture
-x fichier : vrai si le fichier existe et est exécutable
-f fichier : vrai si le fichier existe et est un fichier régulier
-d fichier : vrai si le fichier existe et est un répertoire
-e fichier : vrai si le fichier existe
Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 21/35 21 / 35
Programmation Shell

Calculs arithmétiques

expr $a+$b : Donne le résultat de l’addition de a et b

expr $a−$b : Donne le résultat de la soustraction de a et b

expr $a\∗$b : Donne le résultat de la multiplication de a et


b

expr $a/$b : Donne le résultat de la division de a par b

expr $a%$b : renvoie le reste de la division entière de a


par b

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 22/35 22 / 35


Programmation Shell

Structures de contrôle

Le shell offre les mêmes structures de contrôle qu’un


langage de programmation comme le C

1 Structure conditionnelle

2 Boucle for

3 Boucle while/Until

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 23/35 23 / 35


Programmation Shell

Structures de contrôle
1) Structure conditionnelle

L’instruction if permet d’effectuer des opérations si une


condition est réalisée, et d’autres sinon

La structure la plus simple est la suivante :


if < condition >
then <liste d’instructions>
else <suite d’instructions>
fi

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 24/35 24 / 35


Programmation Shell

Structures de contrôle
1) Structure conditionnelle
On peut écrire des conditions à l’aide de la commande
test qui peut être utilisée pour comparer deux entiers :
-eq ⇒ =
-ne ⇒ différent
-lt ⇒ <
-le ⇒ < ou =
-gt ⇒ >
-ge ⇒ > ou =
Exemple:

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 25/35 25 / 35


Programmation Shell

Structures de contrôle
2) Boucle for

L’instruction for permet de répéter une instruction pour un


ensemble de paramètres
La syntaxe est:
for variable in liste
do <suite de commande>
done
Exemple:
Pour tous les fichiers texte, on enlève le droit de lecture aux
autres utilisateurs:

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 26/35 26 / 35


Programmation Shell

Structures de contrôle
3) Boucle While/Until

Ces deux instructions permettent de faire exécuter une liste


d’instruction tant qu’une (ou jusqu’à ce qu’une) certaine
condition soit réalisée

Syntaxe:
Syntaxe de While Syntaxe de until

while condition until condition


do do
liste commandes liste commandes
done done

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 27/35 27 / 35


Programmation Shell

Structures de contrôle
3) Boucle While/Until

Exemple:

⇒ La réponse au lancement de ce script est : 45

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 28/35 28 / 35


Programmation Shell

Les opérateurs logiques

Pour former des expressions un peu plus complexe, les


opérateurs ! (” non” ), -a (”et”) et -o (”ou”) peuvent
être utilisés, mais également les parenthèses

Exemple:
if test $a = $b -o $a!= $c
then echo ”a est égal à b ou a est différent de c”
else echo ”a est différent de b et égal à c”
fi

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 29/35 29 / 35


Programmation Shell

Comparaisons de chaı̂nes de caractères


La commande suivante : expr $str2 : $str1
I compare la chaı̂ne de caractères str1 à la chaı̂ne de
caractères str2
I Elle s’arrête dès que les chaı̂nes de caractères différent ou
à la fin de str1
I Elle renvoie le nombre de caractères en commun si les
chaı̂nes coı̈ncident jusqu’à la fin de str1 et la valeur 0
sinon
Exemple:
compar=’expr $1 : $2’
if test $compar = 0
then echo $1 différe de $2
else echo $1 est égale à $2
fi
Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 30/35 30 / 35
Programmation Shell

Les fonctions Shell


Une fonction est un ensemble de commandes qui sont
regroupées sous un même nom
Sa syntaxe est la suivante :

Les fonctions sont appelables comme les autres


commandes standards ou fichiers de commandes
Il est possible de leur passer des arguments en utilisant
les notations : $1 , $2..
Une fonction peut retourner une valeur d’état avec le
mot réservé return
Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 31/35 31 / 35
Programmation Shell

Les variables

Les variables Bash ne sont pas typées, à l’inverse de


nombreux langages de programmation
⇒ Bash ne regroupe pas ses variables par ”type”

Essentiellement, les variables bash sont des chaı̂nes de


caractères mais, suivant le contexte, Bash autorise des
opérations entières et des comparaisons sur ces variables

Le facteur décisif étant la seule présence de chiffres dans


la variable

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 32/35 32 / 35


Programmation Shell

Les variables
Exemple: Entier ou chaı̂ne?

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 33/35 33 / 35


Programmation Shell

Les variables

Exemple: Entier ou chaı̂ne?

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 34/35 34 / 35


Programmation Shell

Les variables
Exemple: Variables nulles?

Exemple: Variables non déclarées?

Prof. R. HANNANE (FSSM) Systèmes d’exploitation I 35/35 35 / 35

Vous aimerez peut-être aussi