Vous êtes sur la page 1sur 38

SYSTÈME D’EXPLOITATION

UNIX

NOREDDINE ABGHOUR
nabghour@gmail.com
2017/2018
Shared link :
https://app.box.com/s/zb34fqtzcab6u1yggmq44ybfz1v3su9g

SOMMAIRE
Généralité

Les commandes de base

L SHELL
Le

Les filtres UNIX

La programmation SHELL

N.ABGHOUR
Système d'Exploitation: Unix 2

Linux: Généralité
Propriétés
 multi-tâches
 multi-utilisateurs
 portable

 Libre (et gratuit) !!

Ouverture/Fermeture d’une
d une session
 Travailler sous Linux implique une connexion au système
 Login:
 Identification de l’utilisateur: login + mot-de-passe
 droits accordés par le super-utilisateur (root)
 Logout:
 NE PAS ETEINDRE une machine “sauvagement”
 commande “logout” dans la console

N.ABGHOUR
Système d'Exploitation: Unix 3

1
Structure d'Unix

Kernel

Shell
Applications

N.ABGHOUR
Système d'Exploitation: Unix 4

Structure d'Unix

Kernel (noyau) :
 gestion du système de fichier, du processeur, de
la mémoire centrale et des périphériques

Shell : interpréteur de commande


 (bash, ksh, csh, zsh, etc…)

Applications :
 rm, mv, star office, netscape, etc…

N.ABGHOUR
Système d'Exploitation: Unix 5

Arborescence UNIX
les fichiers sont organisés sous forme d’arborescence de
répertoires et de fichiers.

Chaque répertoire contient un lien vers :


lui-même : désigné par un point .
son père : désigné par deux points ..

N.ABGHOUR
Système d'Exploitation: Unix 6

2
Arborescence UNIX
les fichiers sont organisés sous forme d’arborescence de
répertoires et de fichiers.

Chaque répertoire contient un lien vers :


lui-même : désigné par un point .
son père : désigné par deux points ..

N.ABGHOUR
Système d'Exploitation: Unix 7

Arborescence UNIX
les fichiers sont organisés sous forme d’arborescence de
répertoires et de fichiers.
Chaque répertoire contient un lien vers :
lui-même : désigné par un point .
son père : désigné par deux points ..

N.ABGHOUR
Système d'Exploitation: Unix 8

Arborescence UNIX

Chaque répertoire contient un lienvers :


lui-même : désigné par un point .
son père : désigné par deux points ..

Le répertoire racine / est un répertoire


particulier puisque lui-même . et son
père .. le désigne.

N.ABGHOUR
Système d'Exploitation: Unix 9

3
Exemple d’arborescence UNIX

N.ABGHOUR
Système d'Exploitation: Unix 10

Exemple d’arborescence UNIX

N.ABGHOUR
Système d'Exploitation: Unix 11

Exemple d’arborescence UNIX

Pour des raisons de lisibilité, on


ne
représente en général pas . et ..
dans les dessins d’arborescence
(i li it )
(implicite).

N.ABGHOUR
Système d'Exploitation: Unix 12

4
Arborescence (Chemin/path)
Tout répertoire/fichier peut être identifié
de deux manières différentes

 Par son chemin absolu


 Chemin commençante depuis la racine (/) jusqu’au fichier
recherché.

 Par son chemin relatif


 Chemin commençant depuis le répertoire courant (là ou l’on se
trouve) jusqu’au fichiers recherché.

 Répertoire courant
 Répertoire en on se trouve dans l’arboresence

 Répertoire d’Acceuil /Home/ Connexion


 Chaque utilisateur a son propre répertoire d’acceuil
N.ABGHOUR
Système d'Exploitation: Unix 13

Arborescence (Chemin/path)
/

boot dev etc home proc root sbin tmp usr var

Linux toto mirroir donnees

tp1 linux sav

f1 f2 f3 Fedora.iso

Répertoire courant : /home Répertoire courant : /tmp


Nom répertoire de destination : tp1 Nom fichier de destination : Fedora.iso

Chemin absolu : /home/Linux/tp1 Chemin absolu : /tmp/mirroir/linux/Fedora.iso

Chemin relatif : Linux/tp1 Chemin relatif : mirroir/linux/Fedora.iso

N.ABGHOUR
Système d'Exploitation: Unix 14

Arborescence (Chemin/path)
Relation père/fils
Répertoires :
/ répertoire racine de l’arborescence
. répertoire courant
.. répertoire parent
~ répertoire principal (homedir) de l’utilisateur courant
~toto p
répertoire principal
p p ((homedir)) de l’utilisateur toto
Remarques :
 Le chemin absolu est unique
 Il existe de nombreux chemins relatifs possibles pour un fichier
 En général on choisit le plus cours
 Mais les aller-retours ne sont pas interdit
 En général, on utilise le chemin le plus pratique : relatif quand on

est proche, absolu quand on est loin dans l’arbre.

N.ABGHOUR
Système d'Exploitation: Unix 15

5
Arborescence (Chemin/path)
/

boot dev etc home proc root sbin tmp usr var

tp_c tp_unix mirroir donnees

tp1 linux sav

f1 f2 f3

Répertoire courant : tp1


Nom répertoire de destination : linux

Chemin absolu : /tmp/mirroir/linux

Chemin relatif : ../../../tmp/mirroir/linux

N.ABGHOUR
Système d'Exploitation: Unix 16

Manuel des commandes


La liste des commandes n’est pas exhaustive, seules les plus courantes
et les plus adaptées à votre enseignement sont présentées.
De la même façon, seules les options les plus courantes seront indiquées
pour chaque commande.

Syntaxe man commande


Pour plus d’information et de précision sur les commandes
n’hésitez surtout p
pas à lire les p
pages
g de manuel associées
D
Description
i ti en tapant la commande : man nom de la commande

Chercher dans la section du manuel fournie à


-S
l’option
Options
principales

N.ABGHOUR
Système d'Exploitation: Unix 17

Commandes liées à
l’arborescence des fichiers

6
Déplacement dans l’arborescence
Syntaxe pwd
Afficher le chemin absolu du répertoire de travail en cours
Description (répertoire courant).

Options
principales

Syntaxe cd
La commande interne cd permet de changer de répertoire
Description
courant

Options
principales

N.ABGHOUR
Système d'Exploitation: Unix 19

Exemple : cd, pwd


$ pwd
/home/etu/toto
$ cd projets/gl
$ pwd
/home/etu/toto/projets/gl
$ cd ..
$ pwd
p j
/home/etu/toto/projets
$ cd ../../../etu/toto
$ pwd
/home/etu/toto
$ cd /usr/bin
$ pwd
/usr/bin
$ cd /.././../home/./etu/./..
$ pwd
/home

N.ABGHOUR
Système d'Exploitation: Unix 20

Visualisation de l’arboresence : ls
Syntaxe ls [options] [fichiers…]

La commande ls affiche tout d’abord l’ensemble de ses


arguments fichiers autres que des répertoires. Puis ls
Description
affiche l’ensemble des fichiers contenus dans chaque
répertoire indiqué.
Afficher récursivement le contenu des sous
-R
répertoires.
Afficher tous les fichiers des répertoires, y compris
-a
a les fichiers commençant par un ‘.’

Afficher le numéro d’index (i-noeud) de chaque


Options -i
fichier à gauche de son nom
principales
En plus du nom, afficher le type du fichier, les
-l permissions d’accès, le nombre de liens physiques,
le nom du propriétaire et du groupe, la taille en
octets, et l’horodatage
-1 Présenter un fichier par ligne.
N.ABGHOUR
Système d'Exploitation: Unix 21

7
Information détaillée sur les fichiers : ls -l

$ ls -ail

718024 drwxr-xr-x 3 nabghour fsac 4096 2006-01-24 21:13 .


2769 drwxr-xr-x 33 nabghour fsac 4096 2006-01-24 20:29 ..
718024 -rwxr-xr-x 2 nabghour fsac 231 2006-01-24 21:25 toto

Les droits
Propriétaire Le nom du
la taille du
fichier
fichier
numéro nombre de
liens physique Groupe du La date de dernière
d’inode
sur le fichier propriétaire modification du fichier

Le type du
fichier N.ABGHOUR
Système d'Exploitation: Unix 22

Types et modes d’accès au fichier

- rwx r-x ---


t u g o

Type :
u : user (utilisateur)
- fichier ordinaire
g : group
d répertoire
o : other (autre)
b type bloc
c type caractère r : read (lecture)
l lien symbolique w : write (écriture)
s socket x : execute (exécution)
p pipe
N.ABGHOUR
Système d'Exploitation: Unix 23

Caractère spéciaux pour le shell

$ ls *
achat bateau chat chateau cheval chien gateau rateau
$ ls ?ateau
bateau gateau rateau
$ ls *ateau
bateau chateau gateau rateau
$ ls [gr]ate*
gateau rateau
$ ls [^br]ateau
gateau
$ ls [a-c]*
achat bateau chat chateau cheval chien

N.ABGHOUR
Système d'Exploitation: Unix 24

8
La commande : cat
Syntaxe cat [options] [files]
Concatène des fichiers et les affiche sur la sortie standard.
Description Cat envoie simplement le contenu d’un fichier (ou
plusieurs fichiers) vers la sortie standard
-s N’affiche pas plus qu’une seule ligne blanche.

Options -v Affiche les caractères non imprimables


principales
p
Affiche les caractères non imprimables et
-A affiche $ à la fin de chaque ligne, et Affiche les
tabulations sous forme ^I.
$cat $cat > f1 $cat –nA f1
Aaa Bonjour 1 Bonjour$
Bonsoir
Aaa 2 Bonsoir$
Ctrl^D
Bb $
Bb
Ctrl-D
$

N.ABGHOUR
Système d'Exploitation: Unix 25

Manipulation des noms de fichiers : basename, dirname

Syntaxe basename nom [suffixe]


La commande basename élimine les répertoires en tête
du chemin d’accès du nom de fichier. Si un suffixe est
indiqué, et s'il est identique à la partie finale du nom, il est
Description éliminé de celui-ci. basename affiche le nom obtenu sur la
sortie standard.

$ basename /usr/local/bin/lynx
lynx
$

Syntaxe dirname chemin


dirname élimine le dernier composant délimité par un
Description slash du nom_de_fichier. Si le nom_de_fichier n'a qu'un
seul composant, dirname affiche ‘.’

$ dirname /usr/local/bin/lynx
/usr/local/bin
N.ABGHOUR
Système d'Exploitation: Unix 26

Changement des droits d’accés: chmod


Syntaxe chmod [options] mode fichier...
chmod modifie les permissions d'accès de chacun des
fichiers indiqués, en suivant l'indication de mode, qui peut
être une représentation symbolique du changement à
effectuer, ou un nombre octal représentant le motif binaire
des nouvelles autorisations.
Description Le format symbolique des changements de mode est
`[ugoa...][[+-=][rwxXstugo...]...][,...]'.
Plusieurs opérations symboliques peuvent être séparées
par des virgules.

Modifier récursivement les autorisations des


-R
répertoires et de leurs contenus.
Options Ne pas afficher de messages d'erreurs concernant
principales -f les fichiers dont les autorisations n'ont pas pu être
modifiées.
-v Décrire les modifications apportées.

N.ABGHOUR
Système d'Exploitation: Unix 27

9
Changement des droits d’accés : chmod

Changer les permissions : chmod


 Mode littéral :
 chmod u+r,g+w monFichier
 Mode numérique :

 chmod 753 monFichier

ugo

7=4+2+1 5=4+0+1 3=O+2+1


r w x r w x r w x

N.ABGHOUR
Système d'Exploitation: Unix 28

Changement des attributs d’un fichier : chown, chgrp, touch

chown [OPTIONS] user : groupe fichiers...


Modifier le propriétaire et le groupe d’un fichier

chgrp [OPTIONS] groupe fichiers...


Modifier le groupe d’un fichier

touch fichier
Modifier l’horodatage d’un fichier

N.ABGHOUR
Système d'Exploitation: Unix 29

Droits d’accès par défaut lors de création d’objets : umask

Syntaxe umask [-S][mask]

Afficher ou positionner les droits d’accès d’un fichier


Description Si on utilise une notation octale : on indique les bits qui ne
seront pas positionnés lors de la création des objets.

Options
-S Affiche le masque en notation symbolique
principales
$ umask
mask
022
$ls –l
-rw-r--r-- 2 nabghour fsac 231 2006-01-24 21:25 toto
$ umask 026
$ touch file
$ ls –l file
-rw-r----- 2 nabghour fsac 231 2006-01-24 21:25 file
$ mkdir rep
$ ls –l
drwxr-x--x 2 nabghour fsac 231 2006-01-24 21:25 rep
N.ABGHOUR
Système d'Exploitation: Unix 30

10
Création et suppression de répertoire : mkdir, rmdir

Syntaxe mkdir [options]Repertoire…


mkdir crée un répertoire correspondant à chacun des noms
mentionnés.
Description Par défaut, les répertoires sont créés avec les permissions
d'accès 0777 moins les bits positionnés dans le umask.

Options
-p Créer les répertoires parents s'ils manquent.
principales

Syntaxe rmdir [options]Repertoire…

Description rmdir supprime chaque répertoire vide indiqué.


Effacer les répertoires parents s'ils deviennent vides
Options
-p après la suppression des répertoires mentionnés en
principales
argument

N.ABGHOUR
Système d'Exploitation: Unix 31

Exemple : mkdir, rmdir


$ ls -al
Total12
drwxr-xr-x 2 nabghour fsac 512 08 fév 13:15 .
drwxr-xr-x 37 nabghour fsac 512 08 fév 13:04 ..
-rw-r--r-- 1 nabghour fsac 642 15 jan 11:42 fichier
-rw-r--r-- 1 nabghour fsac 362 25 jan 11:36 fichier2
$ mkdir monrep
$ ls –al
total14
drwxr-xr-x 3 nabghour fsac 512 08 fév 03:15 .
drwxr-xr-x 37 nabghour fsac 512 08 fév 13:04 ..
-rw-r--r-- 1 nabghour fsac 642 15 jan 11:42 fichier
-rw-r--r-- 1 nabghour fsac 362 25 jan 11:36 fichier2
drwxr-xr-x 2 nabghour fsac 512 08 fév 13:15 monrep
$ cd monrep
$ ls –al
Total 4
drwxr-xr-x 2 nabghour fsac 512 08 fév 03:15 .
drwxr-xr-x 37 nabghour fsac 512 08 fév 13:15 ..
$ cd ..

N.ABGHOUR
Système d'Exploitation: Unix 32

Exemple : mkdir, rmdir


$ ls -al
Total14
drwxr-xr-x 3 nabghour fsac 512 08 fév 03:15 .
drwxr-xr-x 37 nabghour fsac 512 08 fév 13:04 ..
-rw-r--r-- 1 nabghour fsac 642 15 jan 11:42 fichier
-rw-r--r-- 1 nabghour fsac 362 25 jan 11:36 fichier2
drwxr-xr-x 2 nabghour fsac 512 08 fév 13:15 monrep

$ rmdir monrep

$ ls -al
Total12
drwxr-xr-x 2 nabghour fsac 512 08 fév 03:15 .
drwxr-xr-x 37 nabghour fsac 512 08 fév 13:04 ..
-rw-r--r-- 1 nabghour fsac 642 15 jan 11:42 fichier
-rw-r--r-- 1 nabghour fsac 362 25 jan 11:36 fichier2

N.ABGHOUR
Système d'Exploitation: Unix 33

11
Création de liens : ln
Syntaxe ln [options] source [dest]
Création de lien entre fichiers.
Lorsqu’on crée un lien physique de source vers dest,
dest pointe vers le même inode que source.
- Si source est effacé, l’inode continue à exister et il est
encore accessible au moins par dest.
Description Lorsqu’on crée un lien symbolique de source vers dest,
dest référence source.
Si source est supprimé,
supprimé dest référencera un fichier qui
n’existe plus

-s Crée un lien symbolique


Options
-f Forcer l'écrasement du fichier destination s'il existe
principales
Demander confirmation avant de supprimer les
-i
fichiers destination

N.ABGHOUR
Système d'Exploitation: Unix 34

Création de liens physique : ln


$ ls -il
Total 4
65329 -rw-r--r--1 nabghour fsac 14 8 fév 13:22 source
65350 -rw-r--r--1 nabghour fsac 36 25 jan 11:36 fichier2

$ cat source
Bonjour
Au revoir

$ ln source dest

$ ls -il

Total6
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 source
65350 -rw-r--r– 1 nabghour fsac 36 25 jan 11:36 fichier2
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 dest

$ cat dest
Bonjour
Au revoir

N.ABGHOUR
Système d'Exploitation: Unix 35

Création de liens physique : ln


$ rm source

$ ls –il
Total 4
65350 -rw-r--r--1 nabghour fsac 36 25 jan 11:36 fichier2
65329 -rw-r--r--1 nabghour fsac 14 8 fév 13:22 dest

$ cat dest
Bonjour
Au revoir

$ ln dest fichier4

$ ls -il

Total6
65350 -rw-r--r– 1 nabghour fsac 36 25 jan 11:36 fichier2
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 dest
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 fichier4

N.ABGHOUR
Système d'Exploitation: Unix 36

12
Création de liens symbolique : ln -s
$ ls -il
Total 6
65350 -rw-r--r– 1 nabghour fsac 36 25 jan 11:36 fichier2
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 dest
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 fichier4

$ ln -s fichier4 fichier5

$ ls -il
total 6
65350 -rw-r--r-- 1 nabghour fsac 36 25 jan 11 :36 fichier2
65329 -rw-r--r-- 2 nabghour fsac 24 8 fév 13 :24 dest
65329 -rw-r--r-- 2 nabghour fsac 24 8 fév 13 :24 fichier4
65378 lrwxr-xr-x 1 nabghour fsac 8 18 fév 00 :24 fichier5  fichier4

$ cat fichier4
Bonjour
Au revoir

$ cat fichier5

N.ABGHOUR
Système d'Exploitation: Unix 37

Création de liens symbolique : ln -s


$ cat fichier5
Bonjour
AU revoir

$ rm fichier4

$ ls -il
Total 4
65350 -rw-r--r-- 1 nabghour fsac 36 25 jan 11 :36 fichier2
65329 -rw-r--r-- 1 nabghour fsac 24 8 fév 13 :24 dest
65378 lrwxr-xr-x 1 nabghour fsac 8 8 fév 13 :24 fichier5 fichier4

$ cat fichier5
cat :fichier5 :No such file or directory

N.ABGHOUR
Système d'Exploitation: Unix 38

Déplacement ou renommage des fichiers : mv


Syntaxe mv [options…] source cible
Déplacement ou renommage des fichiers ou répertoire
En réalité, la commande mv n’effectue pas de copie de
Description données physique mais modifie le nom et transfère les
informations d’un répertoire à l’autre.

-f Forcer l'écrasement du fichier destination s'il existe


Options
principales Demander confirmation avant de supprimer les
-i
fichiers destination

$ ls -i
65338 source 65340 fichier2
$ mv source dest
$ ls -i
65340 fichier2 65338 dest
$ mv dest ..
$ ls -i ../dest
65338 ../dest
$
N.ABGHOUR
Système d'Exploitation: Unix 39

13
Copie de fichiers : cp

Syntaxe cp [options] source... cible


Copier la SOURCE vers la CIBLE, ou de multiples
Description
SOURCES vers un RÉPERTOIRE.
-r,-R copier récursivement les répertoires

-s créer des liens symboliques au lieu de copier


Options
principales Forcer l'écrasement du fichier destination s'il
-f
existe
Demander confirmation avant de supprimer les
-i
fichiers destination

N.ABGHOUR
Système d'Exploitation: Unix 40

Exemple : cp
$ ls -il
total 0
65338 -rw-r--r-- 1 nabghour fsac 0 20 fév 17 :58 fichier3

$ cp fichier3 fichier4

$ ls -il
total 0
65338 -rw-r--r-- 1 nabghour fsac 0 20 fév 17 :58 fichier3
65341 -rw-r--r-- 1 nabghour fsac 0 20 fév 18 :01 fichier4

$ mkdir Rep1 SousRep1


$ cp fichier3 Rep1
$ ls Rep1
fichier3

$ cp -r SousRep1 Rep1
$ ls -R Rep1
fichier3 SousRep1
$

N.ABGHOUR
Système d'Exploitation: Unix 41

Suppression de fichiers : rm
Syntaxe rm [options] fichier…

Description Supprimer les fichiers indiqués sur la ligne de commande

-r Supprimer récursivement les répertoires


Options
-f Forcer la suppression des fichiers
principales
Demander confirmation avant de supprimer les
-i
fichiers
$alias
ll=‘ls –l’
rm =‘rm –i’
$ls
file Rep-contenant-1000-fichier/
$ rm file
Voulez-vous bien supprimer file [y|n]: y
$ ls
Rep-contenant-1000-fichier/
$rm –rf Rep-contenant-1000-fichier/

N.ABGHOUR
Système d'Exploitation: Unix 42

14
Recherche de fichiers : find
find [dirs] expr [command]
Rechercher des fichiers dans une hiérarchie de répertoires
-name : motif Fichier dont le nom de base (sans les répertoires du chemin d’accès),
correspond au motif du shell

-perm +/- mode : fichier dont les autorisations d’accès sont fixées exactement au mode
indiqué

-type type : fichier du type donné (bloc b, caractère c, répertoire d,


tube nommé p, régulier f, liens symbolique l, socket s)

-links +/-n : fichiers ayant n liens

-user utilisateur : fichier appartenant à l’utilisateur indiqué


-nouser : fichier n’appartenant à aucun utilisateur non numérique
-group groupe : fichier appartenant au groupe indiqué
-nogroup : fichier n’appartenant à aucun groupe non numérique
-size +/-n : Fichier utilisant n blocks.

N.ABGHOUR
Système d'Exploitation: Unix 43

Recherche de fichiers : find

find [dir] expr [command]


-inum n : fichier dont le numéro d’i-node est n
-newer fichier : fichier modifié plus récemment que le fichier indiqué
-atime +/-n : dernier accès au fichier il y a n*24 heures
-mtime +/-n : fichier dont les données ont été modifiées il y a n*24 heures
-ctime +/- n : dernière modification du statut du fichier il y a n*24 heures

i t affiche
-print ffi h le
l nom completl td
du fifichier
hi sur lla sortie
ti standard
t d d
-ls affiche le nom du fichier en cours dans le format ‘ls –dils’

-exec cmd : exécute la commande jusqu’à ce qu’on rencontre un ‘ ;’,


La chaîne \{ \} est remplacée par le nom du fichier en cours
de traitement

-ok comme -exec mais interroge d’abord l’utilisateur (demande de confirmation)

N.ABGHOUR
Système d'Exploitation: Unix 44

Recherche de fichiers : find

Exemple 1 : Chercher dans l’arborescence /usr les répertoires dont le nom


commence par ”local” :

$ find /usr –type d -name "local*" -print

Exemple 2 : Chercher dans le répertoire courant les fichiers .c de plus de 40Ko

$ find . –type f -name " *.c " -size +80 -print

Exemple 3 :chercher les liens symboliques qui se nomment local dans /usr

$ find /usr –type l -name "local" -print

Exemple 4 :supprimer dans votre répertoire d’accueil les fichiers a.out ou .o


datant de plus de 7 jours
$ find ~ -type f \( -name a.out -o -name " *.o " \) \
-mtime +7 -exec rm \{\} \;

N.ABGHOUR
Système d'Exploitation: Unix 45

15
Recherche de fichiers : find

Exemple 5 : chercher dans le répertoire courant les fichiers exécutable


appartenant à l’utilisateur toto
$ find . –type f -user toto –perm +111 -print

Exemple 6 : Chercher les fichiers .c ayant le droit 644

$ find . –type f -name ’*.c’ -perm 644 -print

Exemple 7 :chercher les répertoire qui ne sont pas accessible dans /usr

$ find /usr -type d ! –perm +111 -print

Exemple 8 :suppression à partir du répertoire d’accueil des fichiers a.out ou .o


datant de plus de 7 jours et ayant au moins le droit d’exécution pour tout le
monde

$ find $HOME –type f \( -name a.out -o -name ’*.o’ \) \


-mtime +7 –perm -111 -exec rm \{\} \;
N.ABGHOUR
Système d'Exploitation: Unix 46

SHELL

Type de SHELL

N.ABGHOUR
Système d'Exploitation: Unix 48

16
Caractère spéciaux du Shell

N.ABGHOUR
Système d'Exploitation: Unix 49

Métacaractères : Quotation
’ " ` \ changent la façon dont le Shell interprète les
caractères spéciaux

N.ABGHOUR
Système d'Exploitation: Unix 50

Exemple : Quotation
$ ls
chat chien poisson

$ whoami
newbie

$ var=newbie-user

$ echo ‘whoami‘ et le ${var} et les c* ; ls


newbie et le newbie-user et les chat chien
chat chien poisson

$ echo ’‘whoami‘ et le ${var} et les c* ;ls’


‘whoami‘ et le ${var} et les c* ; ls

$ echo "‘whoami‘ et le ${var} et les c* ;ls"


newbie et le newbie-user et les c* ; ls
$

N.ABGHOUR
Système d'Exploitation: Unix 51

17
Flux

1: écran
0: clavier
PROCESSUS 2: écran

 L’entrée
L entrée standard (stdin : 0)) : le flux d
d’entrée
entrée du programme
(par défaut, ce qui est tapé au clavier)

 La sortie standard (stdout : 1) : le flux de sortie du


programme (par défaut, il sera affiché à l’écran)

 L’erreur standard : (stderr : 2) : le flux d’erreur du programme


(par défaut, il sera affiché à l’écran)

N.ABGHOUR
Système d'Exploitation: Unix 52

Métacaractères de redirection

N.ABGHOUR
Système d'Exploitation: Unix 53

Redirection de la sortie standard


cmd > fic : $ echo "Le Corbeau et le Renard" > file1
 redirige la sortie de la
commande dans le $ cat file1
fichier qui est créé s’il Le Corbeau et le Renard
n’existait pas et dont le
contenu est écrasé $ echo "Maitre Corbeau, Sur un arbre
sinon. perché," >> file1

$ cat file1
Le Corbeau et le Renard Maitre Corbeau,
cmd >> fic : Sur un arbre perché,
 redirige la sortie de la
commande à la suite du $ echo "La Cigale et la Fourmi" > file1
contenu du fichier (qui
doit exister). $ cat file1
La Cigale et la Fourmi
$

N.ABGHOUR
Système d'Exploitation: Unix 54

18
Redirection de la sortie d’erreur
cmd 2 > fic : $ ls abc file1 file2
 redirige la sortie ls : abc : No such file or directory
d’erreur de la file1 file2
commande dans le
fichier qui est créé s’il $ ls abc file1 file2 > f1
n’existait pas et dont le ls : abc : No such file or directory
contenu est écrasé
sinon.
$ cat f1
file1 file2

cmd 2 >> fic : $ ls abc file1 file2 2> f2


 redirige la sortie file1 file2
d’erreur de la
commande à la suite $ cat f2
du contenu du fichier ls : abc : No such file or directory
(qui doit exister).
$ ls abc file1 file2 2> f2 > f1

$ cat f2
ls : abc : No such file or directory
$

N.ABGHOUR
Système d'Exploitation: Unix 55

Redirection de l’entrée standard


cmd < fic : $ wc < file1
1 5 23
 l’entrée de la commande
provient du fichier
$ wc << EOF
> Maître Corbeau, Sur un
arbre perché,
> Tenait dans son bec un
fromage,
cmd << etq : > Maitre Renard, par l’odeur
 l’entrée de la commande alléché,
provient des lignes de > Lui tint à peu près ce
commandes suivantes langage :
jusqu’à la ligne ne > EOF
contenant que l’étiquette 4 25 138
$

N.ABGHOUR
Système d'Exploitation: Unix 56

Tube (Pipe) entre flux d’entrée et flux de sortie

cmd 1 | cmd 2
 redirige la sortie de la
commande1 vers l’entrée de
la commande 2

? cmd1 > fictmp


cmd1 | cmd2 <=X=> p
cmd2 < fictmp
rm fictmp
$ ls fic1 fic2 | wc
2 2 10
$

N.ABGHOUR
Système d'Exploitation: Unix 57

19
Redirection vers un descripteur
cmd > & desc $ cat resultat
 redirige la sortie de la ls : abc : No such file or
commande vers le directory
descripteur donné (0 :entrée file1
std, 1 : sortie std, 2 : erreur file2
std)
$ ls fic1 fic2 abc 2>
resultat >&2
$ ls file1 file2 abc >
resultat 2> resultat $ cat resultat
ls : abc : No such file or
$ cat resultat directory
file1 file1
file2
file2
$
o such file or directory

$ ls file1 file2 abc >


resultat 2>&1

N.ABGHOUR
Système d'Exploitation: Unix 58

EXERCICES
Que font les commandes suivantes :

find /etc -name smb.conf 1> resultat 2>&1


find /etc -name smb.conf 2>&1 1> resultat
ls >&-
ls -l /root 2>&1 | tee liste
ls; date > f1
(ls; date)> f
pwd
/home/toto
( mkdir temp;cd temp;touch fichierTemp;pwd;ls ) >f1
pwd
………………………
{ mkdir temp;cd temp;touch fichierTemp;pwd;ls; } >f2
pwd
……………………

N.ABGHOUR
Système d'Exploitation: Unix 59

Expression régulières étendues


Expressions régulières par ligne
 . : (dot)un caractère quelconque
 *, + , ? : opérateurs de répétition
 [x y z] : x ou y ou z
 [A-G] : intervalle
 [^
[^xyz]
] : sauff x, y ou z
 ^ : début de ligne
 $ : fin de ligne
 \{m,n\} :répétions entre m et n fois
 \ : échappement
 | : operateur d’alternation

N.ABGHOUR
Système d'Exploitation: Unix 60

20
Exemples
^$ : représente une ligne vide

^[A-Z] : une majuscule en début de ligne

[a-z][a-z]$ : 2 minuscules en fin de ligne

[ABCD]\{2,10\}$ : entre 2 et 10 car. A,B,C ou D en fin de ligne

.* : une séquence vide ou de plusieurs caractères

^[a-z]\|[A-Z]$: les lignes qui se terminent avec Majuscule


ou les lignes qui commencent par une minuscule

^[a-z]\?$ : les lignes vides ou les lignes qui contiennent une


seule lettre minuscule
N.ABGHOUR
Système d'Exploitation: Unix 61

Les Filtres Linux


Un filtre est une commande qui prend ses donnée
d’entrée sur l’entrée standard et fournit ses résultats
sur la sortie standard.

Utilisés avec les pipes


 Exemple : tri des lignes d’un fichier
 cat /etc/passwd | sort | more

Important : tous les processus formant un pipe


tournent en même temps.

N.ABGHOUR
Système d'Exploitation: Unix 62

Recherche de motifs dans un fichier: grep


grep [-ivn] regexpr fichier...
Afficher les lignes correspondant à un motif donné
-v : les lignes complémentaires
-i : sans tenir compte de la casse (majuscule=minuscule)
-n : en précédant les lignes sélectionnées par leur numéro de ligne
-G : Interprète le motif comme une expression régulière simple
-F : Interprète le motif comme une expression régulière étendue
-l : n’affiche que le nom du fichier

$ more file
il fait beau
il fait chaud
beau temps n’est ce pas ?
$ grep "ˆil" file
il fait beau
il fait chaud
$ cat file | grep –v "ˆil"
beau temps n’est ce pas ?
$
N.ABGHOUR
Système d'Exploitation: Unix 63

21
Filtre linux : tr
Syntaxe tr [options] [string1 [string2]]
Convertit les caractères de string1 par les caractères
correspondant dans string2. tr ne prend pas en argument un
fichier. Noter que string1 et string2 doivent contenir le même nbre
Description de caractères. Le premier caractère ds string1 va être remplacer
par le premier caractère dans string2 et ainsi de suite. string1 ou
string2 peuvent contenir plusieurs types de caractères spéciaux :

Remplace string1 par son complément (tous les caractères


-c n’appartenant pas a string1
Options
p Supprime les caractères dans string1 de la sortie standard
d
-d
principales
Remplace plusieurs occurrence d’un caractère de string1
-s par une seule occurrence
Format des expression de chaîne
 [a-z] = un caractere de ’a’ à ’z’
 [a*n] = a. . . a (n fois)
 \xyz = désigne le caractère de code octal xyz
 [:lower:] = lettre minuscule
 [:upper:] = lettre majuscule
 [:print:] = caractères imprimables
 [:alnum:] = caractères alphanumériques
 …
N.ABGHOUR
Système d'Exploitation: Unix 64

Exemple : tr
$ echo "coucou" | tr ‘[a-z]’ ‘[A-Z]’
COUCOU

$ echo "BONJOUR ÀÔÙÉÊÈ " |tr '[:upper:]' '[:lower:]'


bonjour àôùéêè

$ echo "aaabbbaaa" | tr –s ’[a-z]’ ‘[A-Z]’


ABA

$ tr –d '\000' < fich_MS_DOS.c > fich_Unix.c


Supprime les octets nuls

$ echo
h ’aaabc$#+&19a1$$$cd’
’ b $#+&19 1$$$ d’ | tr
t -cs '[a-zA-Z0-9]'
'[ A Z0 9]' '\n'
'\ '
aaabc
19a1
cd

$ cat file |tr -s '\n'


Convertir les séquences de sauts de lignes en un seul saut de ligne
ceci supprime les lignes blanches)

$ cat file1 | tr -dc '[:print:]\n‘


Supprime les caracteres non imprimables sauf les retours à la ligne

N.ABGHOUR
Système d'Exploitation: Unix 65

Filtre : uniq
Syntaxe uniq [options] [input [output]]
Affiche l’entrée standard sur la sortie standard, en
éliminant les lignes dupliquées adjacentes. uniq traite
Description
seulement les lignes adjacentes, elle est utilisée en
conjonction avec sort
-d Affiche les lignes dupliquées
Options
principales
p c pa es -u Affiche les lignes uniques

-c Affiche le nbre d’exemplaire de chaque ligne

$cat file $uniq file $sort file | uniq $sort file | uniq -d
b b a a
b a b b
a c c c
a d d
c c
d
c

N.ABGHOUR
Système d'Exploitation: Unix 66

22
Filtre : cut
Syntaxe cut options [files]
Affiche les colonnes d’un fichier ou les champs d’une ligne.
Description Par default, les champs sont séparés par des caractères
blancs
Affiche la liste des octets désignés par leur
-blist
positions.
Affiche la liste des caractères désignés par
Options -clist
leur positions.
principales
-flist Affiche la liste des champs
Définit delim comme séparateur entre les
-ddelim
champs.
$ cat fichier $ cat fichier | cut -d : -f1,2
0 :Casablanca:maroc:022 0 :Casablanca
1 :Rabat :maroc :037 1 :Rabat
2 :Fes :maroc :035 2 :Fes
3 :Marrakech :maroc :024 3 :Marrakech
$ $

N.ABGHOUR
Système d'Exploitation: Unix 67

Filtre : sort
Syntaxe sort [options] [files]

Affiche l’entrée standard sur la sortie standard triée par ordre


Description
alphabétique croissant.

-f Ignore la casse.

-k POS1 [,POS2] Trie selon la clé commençant à


POS1 et (optionnellement)
OS [[-POS2]
+POS1 OS ] finissant à POS2.
POS2
Options
principales -n Trie par ordre numérique

-r Inverser l'ordre de tri


Utilise SEP comme le séparateur
-tSEP des clés. Par défaut c’est l’espace.

N.ABGHOUR
Système d'Exploitation: Unix 68

Filtre : sort
$ cat file1 $sort –t: -k4 file
3:casablanca:maroc:123 0:rome:Italie:040
1:paris:France:420 2:madrid:espagne:103
0:rome:Italie:040 3:casablanca:maroc:123
2:madrid:espagne:103 1:paris:France:420

$sort file1 $ sort –t: +3 –r file


0:rome:Italie:040 1:paris:France:420
1:paris:France:420 3:casablanca:maroc:123
2:madrid:espagne:103 2:madrid:espagne:103
p g
3:casablanca:maroc:123 0:rome:Italie:040

$ sort –t: -k4 –n file1 $ ls | sort –d


0:rome:Italie:040
2:madrid:espagne:103
3:casablanca:maroc:123
1:paris:France:420

N.ABGHOUR
Système d'Exploitation: Unix 69

23
Filtre : paste
Syntaxe paste [options] [files]
affiche des lignes regroupant les lignes correspondantes
Description de chaque fichier, séparées par des Tabulations, et
terminées par un Saut de Ligne.
Utiliser successivement les caractères de la
-dn liste_de_délimiteurs plutôt que les Tabulations
Options pour séparer les lignes regroupées.
principales -s Regrouper toutes les lignes d'un seul fichier à
la fois,
fois plutôt qu'une ligne de chaque fichier

$ cat file1 $ paste file1 file2


0 0 A
1 1 B
2 2 C
$ cat file2 $ paste -d'@' file1 file2
A 0@A
1@B
B 2@C
C $ paste -s file1 file2
0 1 2
A B C
N.ABGHOUR
Système d'Exploitation: Unix 70

Filtre : join
Syntaxe join [options] file1 file2
Effectue la jointure selon un champ en commun dans les
Description
deux fichiers file& et file2
-j1 Champ en commun dans file1
Options
principales -j2 Champ en commun dans file2

-jfield Champ en commun dans file1 et file2

$ cat file1 $ join –t : –j1 1 –j2 1 file1 file2


0:zero 0:zero:000
1:un 1:un:111
2:deux 2:deux:222
3:trois $
$ cat file2
0:000
1:111
2:222
$

N.ABGHOUR
Système d'Exploitation: Unix 71

Filtre : cat
Syntaxe cat options [files]
Concatène des fichiers et les affiche sur la sortie standard.
Description Cat envoie simplement le contenu d’un fichier (ou
plusieurs fichiers) vers la sortie standard
-s N’affiche pas plus qu’une seule ligne blanche.

Options -v Affiche les caractères non imprimables


principales
p
Affiche les caractères non imprimables et
-A affiche $ à la fin de chaque ligne, et Affiche les
tabulations sous forme ^I.
$cat $cat > f1 $cat –nA f1
Aaa Bonjour 1 Bonjour$
Bonsoir
Aaa 2 Bonsoir$
Ctrl^D
Bb $
Bb
Ctrl-D
$

N.ABGHOUR
Système d'Exploitation: Unix 72

24
Filtre : wc
Syntaxe wc [options] files
Affiche le nombre de lignes de caractères et de mots dans
Description
1 ou plusieurs fichiers.
-c Affiche le nbre de caractères seulement.
Options
principales -l Affiche le nbre de lignes seulement.

-w Affiche le nbre de mots seulement

$wc file[123]

$wc -l file1

$wc -w file2

N.ABGHOUR
Système d'Exploitation: Unix 74

Filtre :expand
Syntaxe expand [options] [files]
Convertit les tabulations en espaces : cette commande
Description élimine les tabulations et les remplace par le nombre
d’espace correspondants.
Spécifie le nombre d’espace
-tnumber
Options représentant une Tab par défaut c’est 8.
principales Convertit les tabulations seulement au
-i initial
début des lignes

N.ABGHOUR
Système d'Exploitation: Unix 75

Filtre : fmt
Syntaxe fmt [options] [files]
Formate le texte à la largeur spécifiée by filling lines et en
Description supprimant les retours à la ligne. Les fichiers donnés sur la
ligne de commande seront concaténés
Use uniform spacing: one space between
-u
Options words and two spaces between sentences.
principales width Set line width to width. The default is
-w
75 characters.

N.ABGHOUR
Système d'Exploitation: Unix 77

25
Filtre : head
Syntaxe head [options] [files]
Affiche par défaut les dix premières lignes d’un fichier (ou
Description plusieurs fichier). Lorsque plusieurs fichiers sont spécifiés,
une entête est affichée au début de chaque fichier
Affiche les n premiers octets, ou si n est
-c n précédée par k ou m, affiche les n premiers
Options
kilobytes ou megabytes, respectivement.
principales
Affiche les n premières lignes. Par défaut c’est
-nn
10 lignes.
lignes

N.ABGHOUR
Système d'Exploitation: Unix 78

Gestion des signaux : trap, kill


Il est possible de faire intercepter des signaux par le shell. Ces signaux
sont générés par des évènements lancés par l’utilisateur lors de
l’exécution du shell, par exemple :
 1 : coupure de ligne
 2 : arrêt (CTRL+C)
 9 : destruction (NON INTERCEPTABLE)
 15 : fin de process

kill -signal pid


Envoyer un signal à un processus de pid donné

trap ”commandes” numéro_de_signal


Intercepte le signal donné lorsqu’il se présente et effectue la commande.
L’exécution se poursuit ensuite en reprenant à l’endroit de l’interruption.

$ trap "rm -f /tmp/FICTMP ; exit" 2

N.ABGHOUR
Système d'Exploitation: Unix 80

Gestion des signaux


Les commandes
 top:
 $ top
 bg :
 $ bg
 fg :
 $ fg
g
 jobs :
 $ jobs
 ps :
 $ ps

N.ABGHOUR
Système d'Exploitation: Unix 81

26
Programmation SHELL

INTRODUCTION
Un script Shell est un ensemble de commandes dans un fichier ayant
éventuellement des paramètres

=> nom de la commande = nom du fichier = script shell

Les paramètres d’un script Shell sont repérés par leur position quand on
exécute
é t lel script
i t

les commandes sont regroupées par une syntaxe de langage de commandes

plusieurs langages  plusieurs syntaxes regroupées en 2 familles:

 les Bourne Shells (sh, ksh, bash)

 les C-Shells (csh, tcsh))

N.ABGHOUR
Système d'Exploitation: Unix 83

Rôle d’un script shell

Le shell propose un langage de programmation interprété.

Son utilité :

 automatisation des actions

 Contrôle de flux d’exécution

 utilisation de structures plus avancées

 boucles

 Tests

 ...

N.ABGHOUR
Système d'Exploitation: Unix 84

27
Comment créer un script Shell

1. Ouvrir un fichier texte et mettre en 1ère ligne le shell choisi : #!/bin/sh

2. Écrire les commandes constituant le script Shell

3. Rendre le script Shell exécutable

 $chmod
chmod a+x nom_script_shell

4. Exécuter le script

 $.
./nom_script_shell

5. Ajouter le chemin du script à la variable d’environnement PATH, pour


exécuter le script juste avec son nom

 $ nom_script_shell

N.ABGHOUR
Système d'Exploitation: Unix 85

Exemple : Structure d’un script shell

#! Sur la première ligne : interpréteur du présent script


(# ! suivi du chemin complet du shell utilisé plus
d’éventuels arguments)
# commentaires Les ligne de commentaire sont
précédées de #
code Le code est donné ligne par ligne

$ cat ./exemple $ chmod a+x exemple


#!/bin/sh $ ./exemple
# Ce script shell "progdebut" Bonjour !
# se présente et liste les chat chateau cheval chien
# fichiers et processus et sort PID TTY TIME CMD
echo "Bonjour !" 6450 pts/3 00 :00 :00 bash
ls 7152 pts/3 00 :00 :00 ps
ps au revoir
echo "au revoir" $
exit 0
$
N.ABGHOUR
Système d'Exploitation: Unix 86

Variables prédéfinies

$$ pid du processus en cours


$! pid du dernier processus en background
$? code retour de la dernière commande exécutée

N.ABGHOUR
Système d'Exploitation: Unix 87

28
Passage de paramètres à un Shell Script : exemple 1

$ cat script2.sh
# !/bin/sh
# Mon programme qui affiche les paramètres de la ligne de
# commande
echo "* Le nom du programme est : $0"
echo "* Le troisième paramètre est : $3"
echo "* Le nombre de paramètre est : $#"
echo "* Tous les paramètres (mots individuels) : $*"
echo "* Tous les paramètres : $@"
exit 0

$ ./script2.sh un "deux" "trois quatre" cinq


* Le nom du programme est : ./script2.sh
* Le troisième paramètre est : trois quatre
* Le nombre de paramètre est : 4
* Tous les paramètres (mots individuels) : un deux trois
quatre cinq
* Tous les paramètres : un deux trois quatre cinq
$

N.ABGHOUR
Système d'Exploitation: Unix 88

Passage de paramètres à un Shell Script : exemple 2

$ cat script3.sh
#!/bin/sh
echo "Nombre de parametres = " $#
echo "Paramètre numéro 0 = " $0
echo "Paramètre numéro 1 (nom du répertoire) = " $1
echo
echo "No du processus en cours ($0) = $$"
mozilla &
echo "No du dernier processus en background (mozilla)= $!"
echo
date
echo "Nombre de fichiers dans le repertoire $1 =";ls $1| wc -w

$ ./script3.sh /etc
Nombre de parametres = 1
Paramètre numéro 0 = ./script3.sh
Paramètre numéro 1 (nom du répertoire) = /etc
. . . . . . .
N.ABGHOUR
Système d'Exploitation: Unix 89

Passage de paramètres à un Shell Script : exemple 3

$ cat script3.sh
#!/bin/sh
ls
echo "exemple code de retour OK (ls)= $? "
ls toto
echo "exemple code de retour KO = $? "

$ ls
chat chien
$ ./script3.sh
chat chien
exemple code de retour OK (ls)= 0
toto : no sush file or directory
exemple code de retour KO = 1
$

N.ABGHOUR
Système d'Exploitation: Unix 90

29
Passage de paramètres à un Shell Script: précaution

$ cat ./script4_v1.sh
# !/bin/sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12
exit 0

$ ./script4_v1.sh un deux trois quatre cinq six sept huit neuf


dix onze douze
un deux trois quatre cinq six sept huit neuf un0 un1
un2
$

$ cat script4_v2.sh
# !/bin/sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} exit 0

$ ./script4_v2.sh un deux trois quatre cinq six sept huit neuf


dix onze douze
un deux trois quatre cinq six sept huit neuf dix onze
douze
$

N.ABGHOUR
Système d'Exploitation: Unix 91

Décalage de paramètres : shift n

$ cat script5.sh
# !/bin/sh
echo "$# : arg1 = $1 , arg2 = $2 ; total : $@"
shift
echo "$# : arg1 = $1 , arg2 = $2 ; total : $@"
shift
echo "$# : arg1 = $1 , arg2 = $2 ; total : $@"
shift
echo "$#
$# : arg1 = $1 , arg2 = $2 ; total : $@"
$@
shift
exit 0

$ ./script5.sh un deux
2 : arg1 = un , arg2 = deux ; total : un deux
1 : arg1 = deux , arg2 =; total : deux
0 : arg1 = , arg2 = ; total :
shift : can’t shift that many
$

N.ABGHOUR
Système d'Exploitation: Unix 92

Remarque sur shift


A chaque emploi de shift,
 le paramètre $1 précédent est perdu,
 $1 est supprimé de $* et $@,
 $# est décrémenté de 1.

L’emploi de shift nécessite que le shell script ait au moins un paramètre:

Utilisation avec les boucles

for i in $*
for i in $*


do
do
echo $1
echo $i
shift
done
done

N.ABGHOUR
Système d'Exploitation: Unix 93

30
Lecture interactive : read
read variable
La commande interne read attend une entrée de l’utilisateur et l’affecte à la variable
Spécifiée.

$ cat test_read
#!/bin/sh
echo ’Quel
Quel est ton nom ?’
?
read nom
echo "Bonjour $nom"
exit 0
$ ./test_read
Quel est ton nom?
Toto
Bonjour Toto
$

N.ABGHOUR
Système d'Exploitation: Unix 94

calculs numériques : expr


expr chaine
évalue la chaîne de caractère représentant des opérations.

$ cat calcul.sh
#!/bin/sh
C="abc"
N=12
echo "variable
variable C = " ${C}
echo "variable N = " ${N}
echo –e "variable N+1 = \c" ; expr ${N} + 1
N=‘expr ${N} + 10‘
echo "variable N apres N=N+10= " ${N}
$ ./calcul.sh
variable C = abc
variable N = 12
variable N+1 = 13
variable N apres N=N+10= 22

N.ABGHOUR
Système d'Exploitation: Unix 95

Calcul numérique : $( (expr-arthmq) | cmde )


$((expr-arthmq )) et $(cmde)

évalue l’expression arithmétique entre parenthèse.

Exemple :

$ V=10
$ X=20
$ echo $(($V+$X))
30
$ echo $(($X*$V))
200
$ echo $(date)
24/09/2010
$

N.ABGHOUR
Système d'Exploitation: Unix 96

31
Commande : eval
eval commande
La commande est interprétée puis le résultat de l’interprétation est exécuté

$ cat test_eval
#!/bin/sh
v=date
date=02/10/2013
eval ‘’$v’’
eval ‘’$$v’’
eval ‘’echo \$$v ’’
$ ./test_eval
24/09/2010
2078v : commande introuvable
02/10/2013
$

N.ABGHOUR
Système d'Exploitation: Unix 97

Commandes de test : test, [


test expression ou [ expression ]
permet d’évaluer une expression.
• Si vrai, renvoie 0, sinon, renvoie 1.
• S’il n’y a pas d’expression, renvoie 1 (false).
test expression est équivalent à [ expression ]

-d fic  vrai si le fichier existe et est un répertoire


-f fic  vrai si le fichier existe et est un fichier « ordinaire»
-h fic  vrai si le fichier existe et est un lien symbolique
-x fic  vrai si le fichier existe et est autorisé en exécution
-w fic  vrai si le fichier existe et est autorisé en écriture
-r fic  vrai si le fichier existe et est autorisé en lecture
ch1 = ch2  vrai si les deux chaînes sont identiques
ch1 != ch2  vrai si les deux chaînes sont différentes
n1 –eq n2  si les deux nombres sont numériquement égaux
n1 -ne n2  si les deux nombres sont numériquement inégaux
n1 -lt n2  si n1 est numériquement inférieur à n2
n1 -gt n2  si n1 est numériquement supérieur à n2

N.ABGHOUR
Système d'Exploitation: Unix 98

Commandes de test : test, [


test expression ou [ expression ]

n1 -le n2  si n1 est numériquement inférieur ou égal àn2


n1 -ge n2  si n1 est numériquement supérieur ou égal àn2
! exp1  vrai si l’expression est fausse (et vice-versa)
exp1 -a exp2  vrai si les deux expressions sont vraies (AND)
exp1 -o exp2  vrai si au moins une expression est vraie (OR)

$ ls -l
-rwx r--x r-x toto fsac … chat $ [ 3 -lt 42 -a -x chat ]
$ test -f chat $ echo $?
$ echo $? 0
0 $ [ 3 -gt 42 -a -x chat ]
$ test -f chien $ echo $?
$ echo $? 1
1 $
$

N.ABGHOUR
Système d'Exploitation: Unix 99

32
Commande : exec
exec [commande [arg … ]]
La commande exec exécute commande à la place du processus (shell)
courant:
• pas de création de nouveau processus
• arg, . . . deviennent les arguments de commande
• si commande n’existe pas, le shell termine avec un code de retour
non nul (127, par exemple).
Seuls les descripteurs de fichiers 0, 1 et 2 sont transmis à la commande.
Sans argument,
argument les redirections imposées à exec sont permanentes et
appliquées au shell courant.

$ cat test_exec $ sh
#!/bin/sh $ exec 1> /tmp/out
echo bonjour $ date
exec date $ echo bonjour
echo ligne 1 $ exit
echo ligne 2 $cat /tmp/out
$ test_exec 24-09-2010
bonjour bonjour
24-09-2010 $
N.ABGHOUR
Système d'Exploitation: Unix 100

Branchement conditionnel : if-then-elif-else-fi

if liste-commandes-1
then liste-commandes-2
elif liste-commandes-3 < −−−−− autant de fois que nécessaire
else liste-commandes-4 < − − − − − si nécessaire
fi
#!/bin/sh
if commande [options] parametres > resultats.txt 2> erreurs.txt
then
# code
d d
de retour (
(exit)
i ) valant
l 0
bloc-1-de-commandes-unix
else
# code de retour (exit) différent de 0
bloc-2-de-commandes-unix
fi

La condition (booléenne) est en général le code de retour d’une commande


UNIX. Le code de retour de la commande détermine le test « if » :
 Code de retour valant zéro : Le test « if » est vrai.
 Code de retour non nul : Le test « if » est faux
N.ABGHOUR
Système d'Exploitation: Unix 101

Exemple d’utilisation de if-then-elif-else-fi

Exemple 1 :

if [ -d toto ];
then echo "toto est un répertoire"
elif [ -h toto ];
then echo "toto est un lien symbolique"
else echo "faut pousser l’investigation plus loin"
fi

Exemple 2 :

if ls file > /dev/null 2>&1


then
echo " le fichier file existe"
else
echo "le fichier file n’existe pas"
fi

N.ABGHOUR
Système d'Exploitation: Unix 102

33
Branchement conditionnel : case-esac

case expression in
motif1 ) liste-commandes ;; < − autant de fois
...
* ) liste-commandes ;;
esac

Exécute la liste-commandes suivant le motif reconnu.


Le motif à reconnaitre peut s’exprimer
s exprimer sous forme d
d’expression
expression rationnelle
utilisant les méta-caractères :* ? [ ] -

N.ABGHOUR
Système d'Exploitation: Unix 103

Exemple avec case-esac

$ cat question
case $1 in
[Yy][eE][sS] | [oO][uU][iI ] | OK) echo "Tu approuves" ; ;
[Nn][oO]) echo "Tu désapprouves" ; ;
bof ) echo " décides toi" ; ;
pfff*) echo "Pas la peine de répondre" ; ;
*) echo "réponse idiote" ; ;
esac

$ ./question YeS $ ./question areuh


Tu approuves réponse idiote
$ ./question OK $ ./question bof
Tu approuves décides toi
$ ./question nO
Tu désapprouves
$ ./question pfffjhfrfe
Pas la peine de répondre
N.ABGHOUR
Système d'Exploitation: Unix 104

Boucle for-do-done

for variable in liste de mots


do
liste-commandes
done

La variable prend successivement les valeurs de la liste de mots, et


pour chaque valeur
valeur, liste
liste-commandes
commandes est exécutée
exécutée.

N.ABGHOUR
Système d'Exploitation: Unix 105

34
Exemple avec for-do-done

$ cat test_for1 $ cat test_for2


for i in un deux trois quatre for i in /etc/f*
do do
echo "chapitre $i" echo $i
done done

$ ./test_for1 $ ./test_for2
chapitre un /etc/fbtab
chapitre deux /etc/fstab
chapitre trois /etc/ftpusers
chapitre quatre

N.ABGHOUR
Système d'Exploitation: Unix 106

Boucle while-do-done

while liste-commandes-1
do
liste-commandes-2
done

La valeur testée par la commande while est l’état de sortie de la dernière commande
de liste-commandes-1.
Si l’état
l état de sortie est 0
0, alors le shell exécute liste
liste-commandes-2
commandes 2
puis recommence la boucle.

N.ABGHOUR
Système d'Exploitation: Unix 107

Exemple avec while-do-done

$ cat test_while1 $ cat test_while2


#!/bin/sh #!/bin/sh
while [ "$1" ] compteur=5
do while [ $compteur -ge 0 ]
do
echo $1
echo $compteur
shift compteur=‘expr $compteur - 1‘
done done

$ ./test_while1 un "deux trois" quatre $ ./test_while2


un 5
deux trois 4
quatre 3
2
1
0

N.ABGHOUR
Système d'Exploitation: Unix 108

35
Boucle until-do-done

until liste-commandes-1
do
liste-commandes-2
done

Le shell teste l’état de sortie de liste-commandes-1.


Si l’état de sortie est 1, alors, liste-commandes-2 est executée puis la
boucle est recommencée.

N.ABGHOUR
Système d'Exploitation: Unix 109

Exemple avec until-do-done

$ cat test_until1 $ cat test_until2


#!/bin/sh
#!/bin/sh
compteur=5
until [ "$1" = "" ] until [ $compteur -lt 0 ]
do do
echo $1 echo $compteur
shift compteur=‘expr $compteur - 1‘
done done

$ ./test_until1 un "deux trois" quatre $ ./test_until2


un 5
deux trois 4
quatre 3
2
1
0

N.ABGHOUR
Système d'Exploitation: Unix 110

Contrôle du flux d’exécution : break, continue

break ou break n
permet de sortir d’une boucle for, while ou until.
Si n est précisé, il indique le nombre d’imbrication concernée par le break.

continue n
permet de passer à l’itération suivante d’une boucle for, while ou until.
Si n est précisé, il indique le nombre d’imbrication concernée par le continue.

N.ABGHOUR
Système d'Exploitation: Unix 111

36
Exemple : break, continue
$ cat test_continue
#!/bin/sh
for i in 1 2 3 4
do
for j in 1 2 3 4 5
do
if [ $j –eq 2 ]
then
continue 2
else
echo "[$i,$j]"
fi
done
done

$./test_continue
[1,1]
[2,1]
[3,1]
[4,1] N.ABGHOUR
Système d'Exploitation: Unix 112

Déboguage d’un script shell : set -x


Placer en début de script la ligne suivante :
 set -x

Exemple:

$ cat test_set-x
#!/bin/sh
set –x
w=“a = b”
echo
h $w
$
v=stop
if [ $v!=$w ] then echo ok
else
echo ko
fi

$ ./test_set-x
+echo a = b
a = b
+if [ $v!=$w ] then echo ok fi
if [ stop!=a = b ] then echo ok …

N.ABGHOUR
Système d'Exploitation: Unix 113

Listes de commandes
Une séquence de commande s’écrira :
 commande1 ; commande 2 ;...

 commande1

commande2
...
 Cmde1&&cmde2

 Cmde1||cmde2

 { liste cmde; }
 ( liste cmde )
Attention, chaque nouvelle commande (non interne) est exécutée dans un nouveau
processus.

Exécution dans un Sous Shell :


 (commande1 ; commande2)

Exemple : supposons que le répertoire courant est : /home/toto


 pwd; (cd repertoire ; touch toto; pwd); pwd

 exécute la commande touch toto sans changer la valeur du répertoire initial.

N.ABGHOUR
Système d'Exploitation: Unix 114

37
Fonction
On peut regrouper les commandes au sein d’une fonction.

Une fonction se définit de la manière suivante :


function nom_fonction ()
{
#liste-
#liste-commandes
echo $1
echo $*
echo $#
echo $0
}

Les paramètres au sein de la fonction sont accessibles via:


 $1, $2, ... $@, $#.

L’appel d’une fonction se fait de la manière suivante :


 nom_fonction parametre1 parametre2 ...

Une fonction doit être déclarée avant de pouvoir être exécutée.

N.ABGHOUR
Système d'Exploitation: Unix 115

Code de retour : return, exit

return n
Renvoie une valeur de retour pour la fonction shell.

exit n
Provoque l’arrêt du shell courant avec un code retour de n sicelui-ci est
spécifié. S’il n’est pas spécifié, il s’agira de la valeur deretour de la dernière
commande exécutée.

N.ABGHOUR
Système d'Exploitation: Unix 116

38

Vous aimerez peut-être aussi