Systme dexploitation Les scripts csh 1re Anne 2001
- Slides: 29
Système d’exploitation Les scripts csh 1ère Année 2001 -20002 Tienté HSU 1
Système d’exploitation n n n 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 2
Les programmes exécutables Il existe 2 types de programmes exécutables : n Les programmes obtenus par compilation : cc, c++, javac, …etc n Les programmes scripts contenant des commandes directement exécutable par un interpréteur de commandes (csh, perl, …etc). 3
Interpréteur de commandes : shell Un shell est un interpréteur de langage de commandes. Il a 2 rôles : n Un rôle interactif : l’utilisateur peut exécuter directement des commandes n Un rôle de langage de programmation : le shell exécute les commandes contenues dans un fichier Sous unix, il existe plusieurs shells : n Le C-shell (csh) ou turbo C-shell (tcsh) n Le Korn-shell (ksh) n Le Bourne-shell (sh) ou le Bourne-Again-Shell (bash) La liste des shells disponibles se trouve dans /etc/shells 4
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 Interprétation par un la première ligne sous processus commence par #! 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 5
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 : n n n csh script argument 1 argument 2 …. source script argument 1 argument 2 …. Dans le dernier cas le programme devra : n n commencer par #! Référence d’un shell (ex. #! /bin/csh) posséder l’attribut d’exécution (x) 6
csh : les variables (1) Le C-shell distingue 2 types de variables : n 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. n 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 : n n Les variables locales sont en minuscules Les variables globales sont en majuscules 7
les variables (2) : utilisation (1) n n n 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 locale setenv NOMVAR valeur globale n initialisation d’une variable Listage les variables déclarées : set liste des variables locales setenv liste des variables globales 8
les variables (3) : utilisation (2) n Désallocation d’une variable : unset nomvar unsetenv NOMVAR n désallocation d’une variable locale désallocation d’une variable globale Existence d’une variable : $? nomvar 1 si la variable est définie, 0 sinon 9
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 n Affectation d’une variable : @ nomvar = valeur n initialisation d’une variable numérique Opérateurs +, -, *, /, %, ++, --, +=, -=, *=, /=, %= n Exemples : @ @ a=1 a ++ b = 3*$a c = $a - $b a contient 1 a contient 2 b contient 6 c contient -4 10
les variables (5) : les tableaux Le shell permet de définir les variables de type tableau n Affectation d’une variable tableau: set vartab = (v 1 v 2 …) initialisation d’une variable tableau Les éléments du tableau sont indicés de 1 à $#vartab n Accès au contenu des éléments $vartab[1] $vartab[2] $vartab[$#vartab] $vartab[3 -5] $vartab[-7] $vartab[5 -] n n la totalité du tableau le 1 er élément du tableau le 2ème élément du tableau le dernier élément du tableau l’élément 3 à l’élément 5 du 1 er élément au 7ème élément 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]) set vartab = ($vartab valeur) set vartab = (valeur $vartab) le 1 er élément est supprimé ajout d’une valeur en fin ajout d’une valeur au début 11
les variables (6) : suite n Saisi des éléments à partir du clavier : set nomvar = $< set nomvar = ($<) initialisation à partir du clavier, le résultat est une chaîne initialisation à partir du clavier, le résultat est un tableau 12
les variables prédéfinies (1) n Variables globales n n n n 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 : n argv : liste des arguments du shell n n $#argv le nombre d’arguments $argv la liste des arguments $argv[1] le 1 er argument cwd : référence absolue du répertoire de travail 13
les variables prédéfinies (2) n Variables locales homonymes n n n n 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. 14
Les instructions (1) : commentaire n Toute chaîne précédée du caractère # est un commentaire. Exemple : #Ceci est un commentaire 15
Utilisation des divers guillemets n n n ’ : 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` " 16
Les opérateurs utilisables (2) dans: une expression logique sont Les instructions expression logique == != < > <= >= && || ! Exemples : 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 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 17
Les instructions (3) : opérateur de test sur les fichiers Les opérateurs de test sur les fichiers sont : -e fichier -f fichier -r fichier -w fichier -x fichier -o fichier -z fichier -d fichier Exemples : if (-d ~user) if (-f $argv[1]) vrai vrai si si fichier existe fichier est un fichier l’utilisateur a le droit de lecture sur fichier l’utilisateur a le droit d’écriture sur fichier l’utilisateur a le droit d’exécution sur fichier l’utilisateur est propriétaire du fichier existe et est de taille nulle fichier est un répertoire vrai si le répertoire utilisateur user existe vrai si l’argument 1 est un fichier 18
L’instruction conditionnelle (1) : IF Il existe 3 formes possibles : n La plus simple : (pas du mot clef then) if (expression) instruction ou if (expression) instruction n La plus traditionnelle : if (expression) then {instructions} else {instructions} endif ou if (expression) then {expressions} endif 19
n 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 {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) 20
Les instructions itératives (1) : FOREACH n Syntaxe : n n n 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 21
Les instructions itératives (2) : WHILE n Syntaxe : n n n 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) echo $n @ n-end ou while ($n) 22
Les instructions de rupture d’itération (1) : break n 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" 23
n Les instructions de rupture d’itération (2) : 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" 24
L’instruction de choix multiple : switch (1) switch ($var) default : case valeur 1 : {instructions} breaksw endsw case valeur 2 : {instructions} breaksw endsw …… La commande switch teste si le contenu de var est égal à valeur 1 : si oui, les instructions jusqu’au breaksw sont exécutées sinon, la commande teste var par rapport à valeur 2 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 25
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 26
L’instructions goto etiquette : goto etiquette une étiquette est une chaîne de caractères suivie du caractère : branchement inconditionnel sur l’etiquette 27
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 28
Les scripts récursifs (2) Exemple 2 : nb_fichiers 2 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_fichier 2 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_fichiers 2 $argv/$fic` @ nbfic += $res[6] endif end echo "le nombre de fichiers est $nbfic" endif 29
- Chicago central referral system
- Csh inspections
- Csh
- Ksh vs sh
- Nnc
- Casta systme
- Systme solaire
- Metric systme
- Hoefkraakbeen
- Crm systme
- Systme solaire
- Metric systme
- Temps de digestion
- Hyposialorrhée
- Schéma intestin grêle
- Digestion chimique
- Skidded heat systme
- Healthcare hrm systme market
- Systme solaire
- Romeo script
- Fun shell scripts
- Contoh gerakan blok montion
- Scripts to rule them all
- Scripts png
- Glen marino
- Acting scripts
- Are shell scripts compiled or interpreted
- Robo minds
- Lindsay brett
- Moliere scripts