29
1 Système d’exploitation Les scripts csh 1 ère Année Année 2001-20002 Tienté HSU

Système d’exploitation Les scripts csh 1 ère Année Année 2001-20002 Tienté HSU

  • Upload
    alaula

  • View
    23

  • Download
    0

Embed Size (px)

DESCRIPTION

Système d’exploitation Les scripts csh 1 ère Année Année 2001-20002 Tienté HSU. Système d’exploitation. Matériel et logiciels informatiques Généralités d’un système Unix Les processus Le système de fichiers (SGF) Les commandes unix Les scripts C-shell. Les programmes exécutables. - PowerPoint PPT Presentation

Citation preview

Page 1: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

1

Système d’exploitation

Les scripts csh

1ère Année Année 2001-20002

Tienté HSU

Page 2: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

2

Système d’exploitation

Matériel et logiciels informatiques Généralités d’un système Unix Les processus Le système de fichiers (SGF) Les commandes unix Les scripts C-shell

Page 3: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

3

Il existe 2 types de programmes exécutables : Les programmes obtenus par compilation :

cc, c++, javac, …etc Les programmes scripts contenant des

commandes directement exécutable par un interpréteur de commandes (csh, sh, perl, …etc).

Les programmes exécutables

Page 4: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

4

Un shell est un interpréteur de langage de commandes. Il a 2 rôles :

Un rôle interactif : l’utilisateur peut exécuter directement des commandes

Un rôle de langage de programmation : le shell exécute les commandes contenues dans un fichier

Sous unix, il existe plusieurs shells : Le C-shell (csh) ou turbo C-shell (tcsh) Le Korn-shell (ksh) Le Bourne-shell (sh) ou le Bourne-Again-Shell (bash)La liste des shells disponibles se trouve dans /etc/shells

Interpréteur de commandes : shell

Page 5: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

5

Exécution d’un programme shell (1)

Commande Conditions sur le fichier

Effet

csh nom_fichier Fichier lisible Interprétation par un sous processus shell

nom_fichier Fichier exécutable dont la première ligne commence par #! ref_shell

Interprétation par un sous processus ref_shell

source nom_fichier Fichier lisible Interprétation dans le shell courant

exec nom_fichier Fichier lisible et exécutable

Recouvrement du csh courant par un csh interprétant le fichier

Page 6: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

6

Un programme shell est un fichier contenant un ensemble de commandes unix. Cet ensemble est interprétable par le shell.

Exemple : script#! /bin/csh interpréteur de

commandes

echo "ceci est un script" instruction à exécuterExemples d’exécution :

csh script argument1 argument2 …. source script argument1 argument2 … script argument1 argument2 ….

Dans le dernier cas le programme devra : commencer par #! Référence d’un shell (ex. #! /bin/csh) posséder l’attribut d’exécution (x)

Exécution d’un programme shell (2)

Page 7: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

7

Le C-shell distingue 2 types de variables : les variables locales : visibles uniquement par

le processus qui les a créées. Les variables locales du processus père ne sont pas accessibles par le fils.

les variables globales : les variables du père sont accessibles et modifiables par le processus fils

L’ensemble des variables globales est appelé environnement du processus

Par convention : Les variables locales sont en minuscules Les variables globales sont en majuscules

csh : les variables (1)

Page 8: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

8

Nom de variable : chaîne de caractères Accès au contenu d’une variable ($)

Exemple : echo $path Affectation d’une variable :

set nomvar = valeur initialisation d’une variable localesetenv NOMVAR valeur initialisation d’une variable globale

Listage les variables déclarées :set liste des variables localessetenv liste des variables globales

les variables (2) : utilisation (1)

Page 9: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

9

Désallocation d’une variable :unset nomvar désallocation d’une variable localeunsetenv NOMVAR désallocation d’une variable globale

Existence d’une variable :$?nomvar 1 si la variable est définie, 0

sinon

les variables (3) : utilisation (2)

Page 10: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

10

Par défaut tous les variables sont du type caractère.Exemple :

set a = 12+15echo $aOn obtient comme résultat 12+15 et non 27

Affectation d’une variable :@ nomvar = valeur initialisation d’une variable numérique

Opérateurs +, -, *, /, %, ++, --, +=, -=, *=, /=, %=

Exemples :@ a = 1 a contient 1@ a ++ a contient 2@ b = 3*$a b contient 6@ c = $a - $b c contient -4

les variables (4) : variables numériques

Page 11: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

11

Le shell permet de définir les variables de type tableau Affectation d’une variable tableau:

set vartab = (v1 v2 …) initialisation d’une variable tableauLes éléments du tableau sont indicés de 1 à $#vartab

Accès au contenu des éléments$vartab la totalité du tableau$vartab[1] le 1er élément du tableau$vartab[2] le 2ème élément du tableau$vartab[$#vartab] le dernier élément du tableau$vartab[3-5] l’élément 3 à l’élément 5$vartab[-7] du 1er élément au 7ème élément$vartab[5-] du 5ème élément au dernier élément

La dimension d’un tableau : $#vartab La dimension d’une variable de type tableau peut être modifiée

set vartab = ($vartab[2-$#vartab]) le 1er élément est suppriméset vartab = ($vartab valeur) ajout d’une valeur en finset vartab = (valeur $vartab) ajout d’une valeur au début

les variables (5) : les tableaux

Page 12: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

12

Saisi des éléments à partir du clavier :set nomvar = $< initialisation à partir du clavier, le résultat est une chaîneset nomvar = ($<) initialisation à partir du clavier, le résultat est un tableau

les variables (6) : suite

Page 13: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

13

Variables globales HOME : répertoire de connexion de l’utilisateur PATH : liste des répertoires de recherche des

commandes PWD : répertoire courant TERM : type de terminal utilisé SHELL : nom du shell utilisé USER : nom de l’utilisateur DISPLAY : localisation de l’affichage

Variables locales : argv : liste des arguments du shell

$#argv le nombre d’arguments $argv la liste des arguments $argv[1] le 1er argument

cwd : référence absolue du répertoire de travail

les variables prédéfinies (1)

Page 14: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

14

Variables locales homonymes status : code de retour de la dernière commande prompt : chaîne de caractères utilisée comme invite

home : répertoire de connexion de l’utilisateur path : liste des répertoires de recherche des

commandes term : type de terminal utilisé shell : nom du shell utilisé user : nom de l’utilisateur

Toute modification d’une de ces variables entraîne la modification de la variable globale correspondante. Par contre l’inverse n’est pas vrai.

les variables prédéfinies (2)

Page 15: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

15

Toute chaîne précédée du caractère # est un commentaire.

Exemple : #Ceci est un commentaire

Les instructions (1) : commentaire

Page 16: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

16

’ : une chaîne de caractères mise entre simple quotes ne sera pas interprétée par le shell

"  : seuls les métacaractères ($, ` et \) sont interprétés, les autres seront pas interprétés.

` : un texte entre quotes inversés est considéré comme une commande à exécuter.

Exemples :echo ’ ceci est une chaine de caractères non interprétée’echo `pwd`echo " Le répertoire courant de l’utilisateur $user est `pwd`

"

Utilisation des divers guillemets

Page 17: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

17

Les opérateurs utilisables dans une expression logique sont

== test si égalité!= test si différent< test si inférieur> test si supérieur<= test si inférieur ou égal>= test si supérieur ou égal&& opérateur ET logique|| opérateur OU logique! opérateur NOT

Exemples : if ($val <= 20 && $val >=0) la variable val est comprise entre 0 et 20if ("$chaine"  !=  "") la variable chaine est différente vide

Remarque : le caractère espace est nécessaire avant et après un des opérateurs ci-dessus

Les instructions (2) : expression logique

Page 18: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

18

Les opérateurs de test sur les fichiers sont : -e fichier vrai si fichier existe-f fichier vrai si fichier est un fichier -r fichier vrai si l’utilisateur a le droit de lecture

sur fichier-w fichier vrai si l’utilisateur a le droit d’écriture sur

fichier-x fichier vrai si l’utilisateur a le droit d’exécution sur

fichier-o fichier vrai si l’utilisateur est propriétaire du fichier-z fichier vrai si fichier existe et est de taille nulle-d fichier vrai si fichier est un répertoire

Exemples : if (-d ~user) vrai si le répertoire utilisateur user existeif (-f $argv[1]) vrai si l’argument 1 est un fichier

Les instructions (3) : opérateur de test sur les fichiers

Page 19: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

19

Il existe 3 formes possibles : La plus simple : (pas du mot clef then)

if (expression) instructionou if (expression) \

instruction La plus traditionnelle :

if (expression) then ou if (expression) then{instructions} {expressions}

else endif{instructions}

endif

L’instruction conditionnelle (1) : IF

Page 20: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

20

If en cascade : un seul endif sur la totalité de la structure.

if (expression) then{instructions}

else if (expression) then {instructions}

else if (expression) then {instructions}

…else

{instructions}endif

Remarque : le shell est un langage interprété, il est nécessaire de respecter scrupuleusement la syntaxe (par exemple le mot then doit être sur la même ligne que if)

L’instruction conditionnelle (2) : IF

Page 21: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

21

Syntaxe : foreach var (liste)

{instructions}end

liste : une liste de valeurs ou une variable de type tableau Les instructions entre foreach et end sont exécutées avec

var prenant successivement les valeurs des éléments de liste.

Exemples :foreach i (1 2 3 4 5)

echo $iend foreach fic (`ls`)

echo $ficend

Les instructions itératives (1) : FOREACH

Page 22: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

22

Syntaxe : while (expression)

{instructions}end

Les instructions sont exécutées tant que l’expression est vraie.

Remarque : une expression de valeur nulle est considérée comme fausse, tout autre valeur est considérée comme vraie

Exemple :@ n = 4while ($n >= 0) ou while ($n)

echo $n@ n--

end

Les instructions itératives (2) : WHILE

Page 23: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

23

break : provoque la sortie immédiate de la boucle, le script reprend son cours après le end correspondantExemple :

@ somme = 0set n = $<while ($n)

if ($n >=20 || $n < 0) thenset n = $<

break endif

@ somme += $nset n = $<

endecho  "Le somme totale est $somme"

Les instructions de rupture d’itération (1) :

break

Page 24: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

24

continue : provoque le passage immédiat à l’itération suivante de la boucle

Exemple :@ somme = 0set n = $<while ($n) @ reste = $n % 2

if ($reste) then@ n -- continue

endif@ somme += $n@ n --

endecho  "Le somme totale est $somme"

Les instructions de rupture d’itération (2) :

continue

Page 25: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

25

switch ($var) default :case valeur1 : {instructions}

{instructions} breakswbreaksw endsw

case valeur2 : {instructions}breaksw

endsw……

La commande switch teste si le contenu de var est égal à valeur1 : si oui, les instructions jusqu’au breaksw sont exécutéessinon, la commande teste var par rapport à valeur2 et ainsi de suite

Si aucune clause n’est vérifiée, la clause default sera exécutéeLa clause default et l’instruction breaksw sont facultatives

L’instruction de choix multiple : switch (1)

Page 26: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

26

echo "entrer une note : "set note = $<switch ($note)

case 10 : case 9 : case 8 : case 7:case 6:

echo " Vous êtes bon … "breaksw

case 5 : echo " Vous êtes moyen … "breaksw

default : echo " Vous n’êtes pas très fort … "breaksw

endsw

L’instructions de choix multiple : switch (2)

Page 27: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

27

etiquette : une étiquette est une chaîne de caractères suivie du caractère :

goto etiquette branchement inconditionnel sur l’etiquette

L’instructions goto

Page 28: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

28

Un script c-shell peut contenir n’importe quelle commande exécutable sous unix.

On appelle un script récursif un script qui fait appel à lui même.Exemple : nb_fichiers est un script permettant de déterminer le

nombre de fichiers contenus dans un répertoire rep passé en paramètre.

#! /bin/csh# nom du programme : nb_fichiersif ($#argv == 1) then

@ nbfic = 0foreach fic (`\ls $argv`)

if (-f $argv/$fic) then @ nbfic ++

endifendecho "le nombre de fichiers est $nbfic" 

endif

Les scripts récursifs

Page 29: Système d’exploitation  Les scripts csh 1 ère  Année       Année 2001-20002 Tienté HSU

29

Exemple 2 : nb_fichiers2 est un script permettant de déterminer le nombre de fichiers contenus dans le sous arbre ayant pour racine rep passé en paramètre.

#! /bin/csh# nom du programme : nb_fichier2if ($#argv == 1) then

@ nbfic = 0foreach fic (`\ls $argv`)

if (-f $argv/$fic) then @ nbfic ++

else if (-d $argv/$fic) thenset res = `nb_fichiers2 $argv/$fic`@ nbfic += $res[6]

endifendecho "le nombre de fichiers est $nbfic" 

endif

Les scripts récursifs (2)