Le système de fichiers
Transcription
Le système de fichiers
Système d’exploitation IUT de LENS Info LP Année 2011-2012 Tienté HSU 1 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 La gestion des processus La gestion des threads 2 Matériel informatique : PC 56 HP dc5850 - Athlon 64 dual core 4450B 56 HP D925 Dual Core 3G 28 Dell Pentium IV 2.8G 28 IBM Pentium IV 2.8G …. 3 Matériel informatique : le réseau Serveurs windows ROUTEUR CISCO Serveurs Linux VLAN Etudiants switch étudiants VLAN Enseignants switch étudiants switch Enseignants 4 Matériel informatique : Logiciels (1) Systèmes d’exploitation : Bases de Données : Linux Fedora Windows 95, 98, NT, XP Oracle SQL Serveur Postgres/Mysql Langages de développement : C, C++ Java (jdk x.x) 5 Matériel informatique : Logiciels (2) Outils bureautique : Outils de Conception : Windev Windesign Objecteering Outils de Conception de circuits logiques : Microsoft Office StarOffice/Openoffice Orcade Outils Mathématiques : Maple 6 Matériel informatique : Logiciels (3) MSDNAA Microsoft Developer Network Academic Alliance (sept 2011) : 144 logiciels Systèmes d'exploitation (20) : Windows XP, Vista, 7, CE Windows server Windows Web server Outils de développement (51) Microsoft .NET Visual studio Basic, C++, .Net Microsoft DirectX 9 sdk Microsoft Expression Studio Microsoft Solver Microsoft windows mobile Serveurs (46) : Applications (30) : Microsoft project Microsoft visio Microsoft MapPoint Autre : 7 Système d’exploitation Matériel et logiciels informatique Généralités d’un système Unix Les processus Le système de fichiers (SGF) Les commandes unix Les scripts C-shell 8 Système Unix Système Bancaire Réservation Spectacles Jeux Compilateurs Editeurs Interpréteur de commandes Programmes d’application Programmes Systèmes Système d’exploitation Langage Machine Microprogramme Matériel Couche Matérielle 9 Système Linux : fonctions Interface : présenter à l’utilisateur l’équivalent d’une machine virtuelle plus facile à programmer Gestionnaire de ressources : allocation du processeur, des mémoires, des E/S entre les différents programmes qui y font appel 10 Système Linux : caractéristiques Debian, Fedora, Ubuntu Linux Multi-utilisateurs : multiples sessions Multi-tâches : exécution de plusieurs programmes Orienté temps partagé Orienté réseaux : SE réseau Cluster de machines grille de calcul 11 Système Linux : connexion (1) La connexion à un système unix nécessite un nom de connexion et un mot de passe. La création d’un compte est assurée par l’administrateur du système. Exemple : Debian GNU/Linux Kernel 2.6.16-2-686 on an i686 login: hsu Password: Login incorrect login: thsu Password: Last login: Mon Sep 15 12:50:18 from france [thsu@occipital ~]$ 12 Système Linux : connexion (2) Le mot de passe permet d’authentifier un utilisateur. Il doit être judicieusement choisi et changé régulièrement. Exemples de mauvais mot de passe : Virginie, nathalie, skirmish, millenia, Mercedes, Salomon, Pendragon, Chattier, Fright, Racine0, windows9, …. Un bon mot de passe devra contenir en plus des lettres (majuscules et/ou minuscules) , des chiffres et/ou des caractères de ponctuation. Une façon de déterminer un mot de passe : « La rentrée a lieu le lundi 5 septembre » Lralll5s 13 Système Linux : principes Le système d’exploitation présente un ensemble d’instructions étendues (appels système) aux programmes utilisateurs. Ces appels permettent de manipuler (créer, détruire, utiliser) les objets logiciels gérés par le SE. Les plus importantes de ces objets sont : les processus et les fichiers. 14 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 15 Les processus : caractéristiques Un processus est un programme est cours d’exécution. Il est caractérisé par : Son identité : pid L’identité de son créateur (père) : ppid Son propriétaire effectif et réel : uid Son groupe effectif et réel : gid Son état (élu, bloqué, prêt, zombi) Le programme exécutable Sa priorité : nice La date de création Les temps CPU consommés Le masque de création des fichiers : umask La table des descripteurs des fichiers ouverts …. etc 16 Les processus : généalogie Tout processus (sauf init) possède un processus créateur (père). L’ensemble des processus peut être vu comme un arbre. csh csh firefox emacs messager C++ … ftp …. 17 La liste des processus (1) La liste des processus peut être obtenu à l’aide de la commande ps. [thsu@brutus ~]$ ps aux | more USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 1120 476 ? S Jan12 0:05 init [3] bin 339 0.0 0.3 1216 412 ? S Jan12 2:41 portmap root 354 0.0 0.0 0 0 ? SW Jan12 0:00 [lockd] root 355 0.0 0.0 0 0 ? SW Jan12 0:00 [rpciod] root 364 0.0 0.4 1156 512 ? S Jan12 0:00 rpc.statd root 378 0.0 0.3 1104 388 ? S Jan12 0:00 /usr/sbin/apmd -p root 408 0.0 0.3 1268 436 ? S Jan12 0:00 ypbind (master) root 413 0.0 0.3 1316 484 ? S Jan12 0:00 ypbind (slave) root 446 0.0 0.4 1208 512 ? S Jan12 0:00 /usr/sbin/automou root 501 0.0 0.3 1172 472 ? S Jan12 0:45 syslogd -m 0 daemon 551 0.0 0.2 1144 296 ? S Jan12 0:00 /usr/sbin/atd root 566 0.0 0.4 1328 564 ? S Jan12 0:00 crond 18 La liste des processus (2) NI Valeur standard Unix de gentillesse (nice). Une valeur positive signifie un accès moindre au CPU. SIZE Taille virtuelle de l’image du processus (code + données + pile). RSS Taille résidente de l’image du processus. Nombre de kilo-octets se trouvant en mémoire. STAT Etat du processus. Le premier champ correspond à R (runnable) prêt à être exécuté, S (sleeping) endormi, D sommeil ininterruptible, T (traced) arrêté ou suivi, Z (zombie). Le second champ contient W si le processus n’a pas de pages résidentes. Le troisième champ contient N si le processus a une valeur de gentillesse positive (nice, champ NI). TTY terminal de contrôle TRS Taille de code résident en mémoire. 19 La liste des processus (3) USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 566 0.0 0.4 1328 564 ? S Jan12 0:00 crond root 588 0.0 0.3 1156 460 ? S Jan12 0:00 inetd root 602 0.0 0.2 1168 376 ? S Jan12 0:00 lpd root 628 0.0 0.1 1104 144 ? S Jan12 0:00 rpc.rquotad root 641 0.0 1.4 2552 1844 ? S Jan12 0:49 rpc.mountd --no-n root 650 0.0 0.0 0 0 ? SW Jan12 2:47 [nfsd] root 711 0.0 0.5 2128 668 ? S Jan12 0:00 sendmail: accepti postgres 829 0.0 0.3 5048 400 ? S Jan12 0:00 /usr/bin/postmast nobody 7493 0.0 3.1 7636 4008 ? S Jan14 0:00 httpd root 2338 0.0 1.0 2240 1320 pts/0 S 08:08 0:00 login -- thsu thsu 2340 0.0 0.9 2112 1192 pts/0 S 08:08 0:00 –tcsh thsu 2818 15.0 0.5 2328 696 pts/1 R 08:36 0:00 ps aux thsu 2819 2.0 0.4 1336 524 pts/1 S 08:36 0:00 more 20 Gestion des processus Un ensemble de primitives permet à l’utilisateur de gérer ses processus : ps : affiche la liste des processus pstree : affiche les processus sous forme d’un arbre généalogie kill : envoie un signal à un processus kill –9 numpid : arrête le processus de pid numpid killall nomprocess : arrête un processus ayant pour nom nomprocess at : exécution différée d’un processus nice : modification de la priorité d’un processus 21 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 22 Le Système de Gestion des Fichiers (SGF) Pour Le système Unix, tout est fichier. On distingue 3 types de fichier : Les fichiers ordinaires : Fichiers de données : texte ou au format propriétaire Fichiers programmes : instructions exécutables (binaire ou script) Les répertoires Les fichiers spéciaux : imprimantes, disques, cédéroms, … etc 23 Le système de gestion des fichiers (2) Ces éléments sont regroupés dans une structure hiérarchisée représentée sous forme d’un arbre inversé. L’arbre comprend : Les nœuds : les répertoires Les feuilles : les fichiers ordinaires ou spéciaux Le sommet de l’arbre est appelé racine (root) 24 Exemple d’un système de fichier / dev bin etc info1 info11 info12 home var info2 licproinfo …. …. …. abouttem …. 25 Une seule arborescence (1) Tout support physique (disque local ou réseau, cédérom, disquette) peut être découpé en un ensemble de partitions logiques Toute partition organisable en SGF contient une arborescence de fichiers et de répertoires. La partition support de la racine est la partition principale. Les autres partitions peuvent être attachées à un sous répertoire de la partition principale à l’aide du mécanisme de montage (mount). Ces partitions peuvent être montées ou démontées suivant le besoin de l’utilisateur. L’ensemble des fichiers est vu par l’utilisateur comme appartenant à une arborescence unique 26 Une seule arborescence (2) / PC : /dev/hda2 dev bin etc home / …. / home info1 info2 …. licproinfo info11 …. mnt data lost+found Disquette : /dev/fd0 info12 …. Serveur de fichier : /dev/hda5 27 Une seule arborescence (3) [thsu@occipital /soft]$ df Filesystem 1k-blocks /dev/hda2 ens:/home/licproinfo /dev/hda1 ens:/soft 3028080 Used Available Use% Mounted on 7448704 1467324 5603004 21% / 6048320 5020756 720324 87% /home/licproinfo 6048320 5020756 720324 87% /dos/disk_c 2528516 345744 88% /mnt/soft [thsu@occipital /soft]$ 28 Les caractéristiques d’un fichier Un fichier est désigné par son nom Accès au fichier se fait par : Référence absolue Référence relative L’ensemble des caractéristiques d’un fichier est contenues dans un i-nœud (nœud d’information). 29 Le nœud d’information Un i-nœud contient les informations suivantes : Le type de fichier : fichier ordinaire, répertoire, … Les droits d’accès Le nombre de liens Le propriétaire Le groupe du propriétaire La taille du fichier en octets et en blocs Les dates d’accès et de modification … et le contenu du fichier 30 Le nœud d’information : exemple [thsu@brutus ~]$ ls -al /home/info/info1 total 32 drwxr-xr-x 8 root root 4096 oct 12 22:26 . drwxr-xr-x 9 root root 4096 sep 26 15:11 .. drwxr-xr-x 4 root root 4096 oct 12 22:26 Recup_TP drwxr-xr-x 7 root root 4096 oct 20 10:09 commun drwxr-xr-x 32 root info1 4096 oct 27 14:29 info11 drwxr-xr-x 30 root info1 4096 déc 12 12:05 info12 drwxr-xr-x 31 root info1 4096 oct 12 23:31 info13 [thsu@brutus ~]$ 31 Les types de fichier On distingue plusieurs types de fichier sous unix : Les fichiers ordinaires (-) : fichiers textes dont chaque ligne est terminée par <LF> et non <CR><LF> Les fichiers spéciaux de gestion des périphériques : Les fichiers blocs (b) : disque dur, cédérom, … etc Les fichiers caractères (c) : écran, clavier, mulot, … etc Les fichiers FIFO ou pipes (p) : destinés à la communication entre les processus Les répertoires (d) Les liens symboliques (l) 32 Le mécanisme de lien (1) Le mécanisme de lien sous unix permet de désigner un même fichier par 2 références différentes. On distingue 2 types de lien sur les fichiers sous unix : Les liens symboliques : un fichier spécial contenant le chemin d’accès vers le fichier de référence. Le fichier de référence peut ne pas exister. Les liens physiques : une entrée du répertoire pointant sur le même i-nœud que le fichier de référence. Le fichier de référence doit exister 33 Le mécanisme de lien (2) / dev bin etc home info1 fichier licproinfo …. info12 info11 abouttem info2 …. var …. cwallard …. physique symbolique ../../info11/abouttem/fichier I-noeud I-noeud I-noeud I-noeud 34 Le mécanisme de lien (3) cwallard> ls -al /home/info1/info11/abouttem/fichier -rw-r--r-- 1 abouttem info1 102 oct 12 22:26 fichier cwallard> ln ../../info11/abouttem/fichier physique cwallard> ls -al /home/info1/info11/abouttem/fichier -rw-r--r-- 2 abouttem info1 102 oct 12 22:26 fichier cwallard> ls -al physique -rw-r--r-- 2 abouttem info1 102 oct 12 22:26 physique cwallard> ln –s ../../info11/abouttem/fichier symbolique cwallard> ls -al /home/info1/info11/abouttem/fichier -rw-r--r-- 2 abouttem info1 102 oct 12 22:26 fichier cwallard> ls -al symbolique lrwxrwxrwx 1 cwallard info1 31 jan 23 10:15 symbolique -> ../../info11/abouttem/fichier 35 Les droits d’accès à un fichier Les fichiers sont protégés au moyen d’un code binaire de protection sur 9 bits. Propriétaire Groupe Autres 3 bits 3 bits 3 bits rwx rwx rwx Une lettre (rwx) indique l’autorisation, un tiret indique l’interdiction r : lecture w : modification x : droit d’exécution pour un fichier, droit de traverser pour un répertoire 36 Les commandes de modification des droits Il existe 3 commandes permettant de modifier les protections d’un fichier : chmod : change les protections (rwx) du fichier ou répertoire chown : change le propriétaire du fichier chgrp : change le groupe propriétaire du fichier 37 Système d’exploitations Matériel et logiciels informatique Généralités d’un système Unix Les processus Le système de fichiers (SGF) Les commandes unix Les scripts C-shell 38 Les commandes Unix : syntaxe générale La syntaxe générale des commandes : nom_cmd [options] [[argument1][argument2] …] nom_cmd : nom de la commande (en minuscules) options : elles permettent des variantes de la commande. En général une option est précédée du caractère tiret (‘-’). arguments : en général les noms des objets cibles de la commande. L’espace sert de séparateur d’arguments 39 Les commandes Unix : principes Il existe 2 types de commandes : les commandes internes : sous-programmes de l’interpréteur de commande (shell). Elles sont directement exécutables sans création d’un shellfils. Exemples : alias, cd, echo, … les commandes externes : fichiers exécutables. Leur exécution nécessite la création d’un processus fils. Exemples : mkdir, mv, chmod, … 40 Les commandes Unix : Commandes Commandes Commandes Commandes Commandes relatives aux répertoires. relatives aux fichiers relatives aux processus relatives aux réseaux de gestion d’une session 41 Les commandes Unix : répertoires Changement de répertoire : cd Affichage du nom du répertoire courant : pwd Affichage du contenu du répertoire : ls Création d’un répertoire : mkdir Suppression d’un répertoire : rmdir Renommage/déplacement un répertoire : mv 42 Les commandes Unix : fichiers (1) Suppression d’un fichier : rm Copie des fichiers : cp Déplacement d’un fichier : mv Création ou modification de la date de modification d’un fichier : touch Afficher le contenu d’un fichier page par page : more Afficher le contenu d’un fichier : cat Afficher les N premières lignes : head Afficher les N dernières lignes : tail Comparaison de 2 fichiers : diff, cmp Comptage du nombre de caractères, de mots et de lignes contenus dans un fichier : wc 43 Les commandes Unix : fichiers (2) Impression d’un fichier : lpr, a2ps, mp, … Création d’un lien physique ou symbolique : ln Découpage d’un fichier : split Archivage des fichiers : tar, cpio Compression d’un fichier : compress, gzip, bzip2 Décompression d’un fichier : uncompress, gunzip, bzip2 Recherche d’un fichier : find Recherche d’un motif dans un fichier : grep Tri d’un fichier : sort Suppression des lignes adjacentes identiques : uniq Masque de création des fichiers : umask Fusion de 2 fichiers : paste Extraction des lignes communes de 2 fichiers :44 comm Les commandes Unix : processus Affichage de la liste des processus : ps Affichage de la liste des processus sous forme d’un arbre : pstree Envoie d’un signal à un processus : kill Arrêt d’un processus de nom nomprocess : killall Exécution différée d’un processus : at Planification des tâches : crontab Modification de la priorité d’un processus : nice 45 Les commandes Unix : réseaux Envoie d’un message à un utilisateur : mail Gestionnaire de messages : pine, elm, mailx Envoie d’un message sur un terminal : write Accepte/refuse la réception des messages : mesg Dialogue entre 2 utilisateurs connectés : talk Connexion sur une machine distant : rlogin, telnet Exécution d’une commande à distance : rsh, ssh Copie des fichiers entre systèmes distants : rcp, scp Transfert de fichier : ftp 46 Les commandes Unix : session Changement de l’interpréteur de commandes : chsh Affichage de l’identité de l’utilisateur : id Affichage du nom de login de l’utilisateur : logname Changement du mot de passe local : passwd Changement du mot de passe réseau : kpasswd Affichage du répertoire courant : pwd Modification temporaire d’utilisateur : su Lancement d’un interpréteur de commandes : csh, sh, … Fermeture d’une session : exit, logout 47 Exécution des commandes Enchaînement des commandes (;) cd / ; pwd ; ls –al Exécution en arrière plan (&) netscape & si une des commandes n’existe pas, l’exécution s’arrête. l’utilisateur récupère l’interpréteur pour lancer d’autres commandes Exécution conditionnelle && ou || cm1 && cm2 cm2 est exécutée si l’exécution de cm1 a réussi cm1 || cm2 cm2 est exécutée si l’exécution de cm1 a échoué 48 Exécution des commandes (2) : alias La commande alias permet définir une commande alias d’une suite de commandes. alias alias alias alias alias h history dir ‘pwd ; ls –al ‘ rm ‘rm –i` ls ‘ls –dircolors` copy ‘cp \!:1 \!:2` \!* \:!n \!^ \!$ liste des paramètres nième paramètre premier paramètre dernier paramètre 49 Exécution des commandes (3) : alias suite Annulation de l’alias : \ alias cp `cp –i` cp f1 f2 \cp f1 f2 définition d’un alias cp équivalent à cp –i f1 f2 exécute la commande initiale : cp f1 f2 La commande unalias permet de supprimer un alias unalias h 50 Exécution des commandes (4) : redirection Il existe 3 fichiers associés à chaque processus : L’entrée standard (stdin) : clavier La sortie standard (stdout) : écran L’erreur standard (stderr) : écran Redirection de la sortie standard : cmd > fichier cmd >> fichier cmd >& fichier Redirection de l’entrée standard : cmd < fichier le résultat de cmd est mis dans un fichier le résultat de cmd est mis à la fin du fichier la sortie erreur est dans le fichier cmd lit les données dans le fichier Echaînement des commandes (pipe) : cmd1 | cmd2 la sortie de cmd1 et dirigée sur l’entrée de cmd2 51 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 52 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). 53 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 54 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 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 55 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) 56 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 57 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 locale setenv NOMVAR valeur globale initialisation d’une variable initialisation d’une variable Listage les variables déclarées : set liste des variables locales setenv liste des variables globales 58 les variables (3) : utilisation (2) Désallocation d’une variable : unset nomvar unsetenv NOMVAR 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 59 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 ++ b = 3*$a c = $a - $b a contient 1 a contient 2 b contient 6 c contient -4 60 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 $vartab[1] $vartab[2] $vartab[$#vartab] $vartab[3-5] $vartab[-7] $vartab[5-] la totalité du tableau le 1er é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 1er é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 1er élément est supprimé ajout d’une valeur en fin ajout d’une valeur au début 61 les variables (6) : suite 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 62 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 63 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. 64 Les instructions (1) : commentaire Toute chaîne précédée du caractère # est un commentaire. Exemple : #Ceci est un commentaire 65 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` " 66 Les instructions (2) : expression logique Les opérateurs utilisables dans une expression logique sont == != < > <= >= && || ! 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 67 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 vrai vrai vrai vrai si si si si 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 vrai si fichier existe et est de taille nulle vrai si fichier est un répertoire vrai si le répertoire utilisateur user existe vrai si l’argument 1 est un fichier 68 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 {instructions} else {instructions} endif ou if (expression) then {instructions} endif 69 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) 70 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 71 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) echo $n @ n-end ou while ($n) 72 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" 73 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" 74 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 75 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 76 L’instructions goto etiquette : goto etiquette une étiquette est une chaîne de caractères suivie du caractère : branchement inconditionnel sur l’etiquette 77 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 78 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 = `./$0 $argv/$fic` @ nbfic += $res[6] endif end echo "le nombre de fichiers est $nbfic" endif 79 Les scripts récursifs (3) Exemple 2 : nb_fichiers2 est un script permettant de déterminer le nombre de fichiers et répertoires contenus dans le sous arbre ayant pour racine rep passé en paramètre. #! /bin/csh # nom du programme : nb_fichier3 if ($#argv == 1) then @ nbfic = 0 @ nbreps = 0 foreach fic (`\ls $argv`) if (-f $argv/$fic) then @ nbfic ++ else if (-d $argv/$fic) then @ nbrep ++ set res = `./$0 $argv/$fic` @ nbfic += $res[6] @ nbreps += $res[12] endif end echo "le nombre de fichiers est $nbfic" echo "le nombre de repertoires est $nbreps" endif 80