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

Documents pareils