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

Preview:

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

1

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

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

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

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

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)

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)

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)

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)

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

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

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

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)

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)

15

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

Exemple : #Ceci est un commentaire

Les instructions (1) : commentaire

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

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

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

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

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

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

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

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

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

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)

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)

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

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

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)