Upload
alaula
View
22
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
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)