système d’exploitation les scripts csh 1 ère année année 2001-20002 tienté hsu
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 PresentationTRANSCRIPT
![Page 1: Système d’exploitation Les scripts csh 1 ère Année Année 2001-20002 Tienté HSU](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062800/568142b1550346895daef376/html5/thumbnails/29.jpg)
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)