1 / 29

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. 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.

alaula
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Les programmes exécutables 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).

  4. Interpréteur de commandes : shell 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

  5. Exécution d’un programme shell (1)

  6. Exécution d’un programme shell (2) 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écuter Exemples 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)

  7. csh : les variables (1) 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

  8. les variables (2) : utilisation (1) • 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 locale setenv NOMVAR valeur  initialisation d’une variable globale • Listage les variables déclarées : set liste des variables locales setenv  liste des variables globales

  9. les variables (3) : utilisation (2) • Désallocation d’une variable : unset nomvar désallocation d’une variable locale unsetenv NOMVAR désallocation d’une variable globale • Existence d’une variable : $?nomvar  1 si la variable est définie, 0 sinon

  10. les variables (4) : variables numériques Par défaut tous les variables sont du type caractère. Exemple : set a = 12+15 echo $a On 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

  11. les variables (5) : les tableaux Le shell permet de définir les variables de type tableau • Affectation d’une variable tableau: set vartab = (v1 v2 …) initialisation d’une variable tableau Les é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 fin set vartab = (valeur $vartab)  ajout d’une valeur au début

  12. les variables (6) : suite • Saisi des éléments à partir du clavier : set nomvar = $< initialisation à partir du clavier, le résultat est une chaîne set nomvar = ($<) initialisation à partir du clavier, le résultat est un tableau

  13. les variables prédéfinies (1) • 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

  14. les variables prédéfinies (2) • 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.

  15. Les instructions (1) : commentaire • Toute chaîne précédée du caractère # est un commentaire. Exemple : #Ceci est un commentaire

  16. Utilisation des divers guillemets • ’ : 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` "

  17. Les instructions (2) : expression logique 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 20 if ("$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

  18. Les instructions (3) : opérateur de test sur les fichiers 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 existe if (-f $argv[1])  vrai si l’argument 1 est un fichier

  19. L’instruction conditionnelle (1) : IF Il existe 3 formes possibles : • La plus simple : (pas du mot clef then) if (expression) instruction ou if (expression) \ instruction • La plus traditionnelle : if (expression) then ou if (expression) then {instructions} {expressions} else endif {instructions} endif

  20. L’instruction conditionnelle (2) : IF • 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)

  21. Les instructions itératives (1) : FOREACH • 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 $i end foreach fic (`ls`) echo $fic end

  22. Les instructions itératives (2) : WHILE • 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 = 4 while ($n >= 0) ou while ($n) echo $n @ n-- end

  23. Les instructions de rupture d’itération (1) : break • break : provoque la sortie immédiate de la boucle, le script reprend son cours après le end correspondant Exemple : @ somme = 0 set n = $< while ($n) if ($n >=20 || $n < 0) then set n = $< break endif @ somme += $n set n = $< end echo  "Le somme totale est $somme"

  24. Les instructions de rupture d’itération (2) : continue • continue : provoque le passage immédiat à l’itération suivante de la boucle Exemple : @ somme = 0 set n = $< while ($n) @ reste = $n % 2 if ($reste) then @ n -- continue endif @ somme += $n @ n -- end echo  "Le somme totale est $somme"

  25. L’instruction de choix multiple : switch (1) switch ($var) default : case valeur1 : {instructions} {instructions} breaksw breaksw 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ées sinon, 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ée La clause default et l’instruction breaksw sont facultatives

  26. L’instructions de choix multiple : switch (2) 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

  27. L’instructions goto etiquette : une étiquette est une chaîne de caractères suivie du caractère : goto etiquette branchement inconditionnel sur l’etiquette

  28. Les scripts récursifs 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_fichiers if ($#argv == 1) then @ nbfic = 0 foreach fic (`\ls $argv`) if (-f $argv/$fic) then @ nbfic ++ endif end echo "le nombre de fichiers est $nbfic"  endif

  29. Les scripts récursifs (2) 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_fichier2 if ($#argv == 1) then @ nbfic = 0 foreach fic (`\ls $argv`) if (-f $argv/$fic) then @ nbfic ++ else if (-d $argv/$fic) then set res = `nb_fichiers2 $argv/$fic` @ nbfic += $res[6] endif end echo "le nombre de fichiers est $nbfic"  endif

More Related