Vous êtes sur la page 1sur 102

UNIX AVANCE

N.ABGHOUR
2010-2011
nabghour@gmail.com

N.ABGHOUR UNIX AVANCE


SOMMAIRE

™ Généralité
™ Rappel des commandes de base
™ Le SHELL
™ Les filtres UNIX
™ La programmation SHELL
™ Gestion des signaux
™ La commande sed
™ Le Langage awk
N.ABGHOUR UNIX AVANCE
Linux: Généralité
™ Propriétés
ƒ multi-tâches
ƒ multi-utilisateurs
ƒ portable
ƒ Libre (et gratuit) !!

™ Ouverture/Fermeture d’une session


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

N.ABGHOUR UNIX AVANCE


Structure d'Unix

Kernel

Shell
Applications

N.ABGHOUR UNIX AVANCE


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 UNIX AVANCE


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 UNIX AVANCE


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 UNIX AVANCE


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 UNIX AVANCE


Arborescence UNIX
™ Chaque répertoire contient un lien vers :
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 UNIX AVANCE


Exemple d’arborescence UNIX

N.ABGHOUR UNIX AVANCE


Exemple d’arborescence UNIX

N.ABGHOUR UNIX AVANCE


Exemple d’arborescence UNIX

Pour des raisons de lisibilité, on ne


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

N.ABGHOUR UNIX AVANCE


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.

man commande
Pour
Pourplus
plusd’information
d’informationet
etde
deprécision
précisionsur
surles
lescommandes
commandesn’hésitez
n’hésitezsurtout
surtout
pas
pasààlire
lireles
lespages
pagesde
demanuel
manuelassociées
associéesen entapant
tapantlalacommande
commande: :
man
mannom
nomde delalacommande
commande

N.ABGHOUR UNIX AVANCE


Commandes liées à l’arborescence des
fichiers

N.ABGHOUR UNIX AVANCE


Déplacement dans l’arborescence

pwd

Afficher
Afficherlelenom
nomdu
durépertoire
répertoirede
detravail
travailen
encours
cours(répertoire
(répertoirecourant).
courant).

cd

La
Lacommande
commandeinterne
internecd
cdpermet
permetde
dechanger
changerde
derépertoire
répertoirecourant.
courant.

N.ABGHOUR UNIX AVANCE


Exemple : cd, pwd
$ pwd
/home/etu/toto
$ cd projets/gl
$ pwd
/home/etu/toto/projets/gl
$ cd ..
$ pwd
/home/etu/toto/projets
$ cd ../../../etu/toto
$ pwd
/home/etu/toto
$ cd /usr/bin
$pwd
/usr/bin
$ cd /.././../home/./etu/./..
$ pwd
/home

N.ABGHOUR UNIX AVANCE


Visualisation de l’arboresence : ls

ls [OPTIONS] [fichiers]...
La
Lacommande
commandelslsaffiche
affichetout
toutd’abord
d’abordl’ensemble
l’ensemblededeses
sesarguments
argumentsfichiers
fichiers
autres
autresque
quedes
desrépertoires.
répertoires.Puis
Puislslsaffiche
affichel’ensemble
l’ensembledes
desfichiers
fichierscontenus
contenus
dans
danschaque
chaquerépertoire
répertoireindiqué.
indiqué.

-R
-R : :Afficher
Afficherrrécursivement
écursivement lelecontenu
contenudes
dessous -répertoires.
sous-répertoires.
-a
-a : :Afficher
Affichertous
tousles
lesfichiers
fichiersdesdesrrépertoires,
épertoires, yycompris
comprisles
lesfichiers
fichiers
commen
commençantçant par
parunun‘.‘.’

--i
i : :Afficher
Afficherlelenum éro dd’index
numéro ’index (i(i-noeud)
-noeud) dedechaque
chaquefichier
fichierààgauche
gauche
dedeson
sonnom.
nom.
--l
l : :EnEnplus
plusdudunom,
nom,afficher
afficherleletype
typedu
dufichier,
fichier,les
lespermissions
permissionsdd’accès,
’accès,
lelenombre
nombrede deliens
liensphysiques,
physiques,lelenom
nomdu dupropri étaire et
propriétaire etdudugroupe,
groupe,
lalataille
tailleen
enoctets,
octets,et etl’l’horodatage.
horodatage.

N.ABGHOUR UNIX AVANCE


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 UNIX AVANCE
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 UNIX AVANCE


Afficher le type d’un fichier : file
file fichiers...

Tente
Tentede
dedeviner
devinerleletype
typede
defichier
fichier((répertoire,
répertoire,exécutable
exécutablebinaire,…)
binaire,…)

La
Lacommande
commandeinterne
internecd
cdpermet
permetde
dechanger
changerde
derépertoire
répertoirecourant.
courant.

$file

N.ABGHOUR UNIX AVANCE


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 UNIX AVANCE
Manipulation des noms de fichiers : basename, dirname
basename nom de fichier
La
Lacommande
commandebasename
basenameélimine
élimineles
lesrépertoires
répertoiresen
entête
têtedu
duchemin
chemind’accès
d’accès
du
dufichier.
fichier.

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

dirname nom de fichier


La
Lacommande
commandedirname
dirnamene
neconserve
conserveque
queles
lesrépertoires
répertoiresen
entête
têtedu
duchemin
chemin
d’accès du fichier.
d’accès du fichier.

$ dirname /usr/local/bin/lynx
/usr/local/bin
$

N.ABGHOUR UNIX AVANCE


Changement des droits d’un fichier : chmod

chmod mode fichiers...


Modifier
Modifierles
lesautorisations
autorisationsd’accès
d’accèsààun
unfichier.
fichier.Le
Lemode
modes’écrit
s’écriten
enoctal
octal(777)
(777)
ou
ouen
enchaine
chaine(ugoa(+-=)rwxstX).
(ugoa(+-=)rwxstX).

-R
-R modifie
modifierécursivement
récursivementles
lesdroits
droitssur
surtout
toutune
unearborescence
arborescence
ss: : set-user-ID
set-user-ID(suid)
(suid)
tt : : sticky-bit
sticky-bit
XX: : xxseulement
seulementsisirépertoire.
répertoire.

N.ABGHOUR UNIX AVANCE


Changement des droits d’un fichier : chmod

™ Changer les permissions : chmod


ƒ Mode littéral :
9 chmod u+r,g+w monFichier
ƒ Mode numérique :
9 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 UNIX AVANCE


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

chown OPTIONS user : groupe fichiers...


Modifier
Modifierlelepropriétaire
propriétaireet
etlelegroupe
grouped’un
d’unfichier
fichier

chgrp OPTIONS groupe fichiers...


Modifier
Modifierlelegroupe
grouped’un
d’unfichier
fichier

touch fichier
Modifier
Modifierl’horodatage
l’horodataged’un
d’unfichier
fichier

N.ABGHOUR UNIX AVANCE


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

umask [mode-par-defaut] (en anglais user mask)


Afficher
Afficherououpositionner
positionnerles
lesdroits
droitsd’accès
d’accèsd’un
d’unfichier
fichier
On
Onutilise
utiliseune
unenotation
notationoctale
octale: :on
onindique
indiqueles
lesbits
bitsqui
quine
neseront
seront
pas
paspositionnés
positionnéslors
lorsde
delalacréation
créationdes
desobjets.
objets.

$ umask
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 UNIX AVANCE


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

mkdir OPTIONS repertoire...


mkdir
mkdir crée
créeun
unrépertoire
répertoirecorrespondant
correspondantààchacun
chacundes
desnoms
nomsmentionnés
mentionnés

-p
-p Créer
Créerles
lesrépertoires
répertoiresparents
parentss’ils
s’ilsmanquent
manquent

rmdir OPTIONS répertoire...


rmdir
rmdirsupprime
supprimechaque
chaquerépertoire
répertoirevide
videindiqué
indiquépour
poursupprimer
supprimerrécursivement
récursivement
des
desrépertoires
répertoiresnon-vides,
non-vides,utiliser
utiliser rm
rm-r-r

N.ABGHOUR UNIX AVANCE


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 UNIX AVANCE


Exemple : mkdir, rmdir
$ ls -als
Total14
2 drwxr-xr-x 3 nabghour fsac 512 08 fév 03:15 .
6 drwxr-xr-x 37 nabghour fsac 512 08 fév 13:04 ..
2 -rw-r--r-- 1 nabghour fsac 642 15 jan 11:42 fichier
2 -rw-r--r-- 1 nabghour fsac 362 25 jan 11:36 fichier2
2 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 UNIX AVANCE


Création de liens : ln

ln OPTIONS file1 file2


Création
Créationde delien
lienentre
entrefichiers.
fichiers.
Lorsqu’on
Lorsqu’oncrée créeun unlien
lienphysique
physiquededefile1
file1vers
versfile2,
file2,file2
file2pointe
pointevers
verslelemême
même
inode
inodequequefile1.
file1.
¾¾SiSifile1
file1estesteffacé,
effacé,l’inode
l’inodecontinue
continueààexister
existeretetest
estencore
encoreaccessible
accessibleauau
moins
moinspar parfile2.
file2.
Option
Option::
-s
-s lien
liensymbolique
symbolique

Lorsqu’on
Lorsqu’oncrée
créeun
unlien
liensymbolique
symboliquede defile1
file1vers
versfile2,
file2,file2
file2référence
référencefile1.
file1.
¾¾Si file1 est supprimé, file2 référencera un fichier qui n’existe
Si file1 est supprimé, file2 référencera un fichier qui n’existe plusplus

N.ABGHOUR UNIX AVANCE


Création de liens physique : ln
$ ls -il
Total 4
65329 -rw-r--r--1 nabghour fsac 14 8 fév 13:22 fichier
65350 -rw-r--r--1 nabghour fsac 36 25 jan 11:36 fichier2
$ cat fichier
Bonjour
Au revoir
$ ln fichier fichier3
$ ls -il
Total6
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 fichier
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 fichier3
$ echo toto>>fichier
$ cat fichier
Bonjour
Au revoir
toto
$ cat fichier3
Bonjour
Au revoir
toto
N.ABGHOUR UNIX AVANCE
Création de liens physique : ln
$ rm fichier
$ 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 fichier3
$ cat fichier3
Bonjour
Au revoir
toto
$ ln fichier3 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 fichier3
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 fichier4

N.ABGHOUR UNIX AVANCE


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 fichier3
65329 -rw-r--r– 2 nabghour fsac 14 8 fév 13:22 fichier4
$ ln -s fichier3 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 fichier3
65329 -rw-r--r-- 2 nabghour fsac 24 8 fév 13 :24 fichier4
65378 lrwxr-xr-x 1 nabghour fsac 8 8 fév 13 :24 fichier5 Æ fichier3
$ echo titi >> fichier3
$ cat fichier3
Bonjour
Au revoir
toto
titi
$ cat fichier5

N.ABGHOUR UNIX AVANCE


Création de liens symbolique : ln -s
$ cat fichier5
Bonjour
AU revoir
toto
titi
$ rm fichier3
$ 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 fichier4
65378 lrwxr-xr-x 1 nabghour fsac 8 8 fév 13 :24 fichier5 Æfichier3
$ cat fichier5
cat :fichier5 :No such file or directory

N.ABGHOUR UNIX AVANCE


Déplacement ou renommage des fichiers : mv
mv file1 file2
Déplacement
Déplacementou ourenommage
renommagedes desfichiers
fichiersEn
Enréalité,
réalité,lalacommande
commande
mv
mvn’effectue
n’effectuepas
pasdedecopie
copiede
dedonnées
donnéesphysique
physiquemais
maismodifie
modifielele
nom
nomet
ettransfère
transfèreles
lesinformations
informationsd’un
d’unrépertoire
répertoireààl’autre.
l’autre.

$ ls -i
65338 fichier1 65340 fichier2
$ mv fichier1 fichier3
$ ls -i
65340 fichier2 65338 fichier3
$ mv fichier2 ..
$ ls -i ../fichier2
65340 ../fichier2
$

N.ABGHOUR UNIX AVANCE


Copie de fichiers : cp
cp OPTIONS file1... file2
Duplique
Dupliquephysiquement
physiquementles lesdonnées
donnéesd’un d’unfichier
fichier
¾¾Si
Sifile1
file1estestlelefichier
fichierexistant
existantààcopier
copier
¾si
¾si file2 n’existe pas, il est crééde
file2 n’existe pas, il est créé defaçon
façonidentique
identiqueààfile1 file1; ;
¾si
¾sifile2
file2existe
existeet etest
estun
unfichier,
fichier,ililest
estécrasé
écrasépar parlelecontenu
contenude defile1
file1; ;
¾si
¾sifile2
file2est
estun unrépertoire,
répertoire,alors alorsfile1
file1estestdupliqué
dupliquésoussouslelemême
même
nom
nomdansdanslelerépertoire
répertoirefile2.
file2.
¾¾Si
Sifile1
file1estestununrépertoire
répertoireexistant
existantààcopier,
copier,ililfaut
faututiliser
utiliserl’option
l’option–r –r
¾si
¾sifile2
file2n’existe
n’existepas,
pas,ililest
estcréé
crééde defa¸con
fa¸conidentique
identiqueààfile1
file1
(sous
(sousrépertoires
répertoiresetetsous-fichiers
sous-fichierscompris,
compris,récursivement)
récursivement); ;
¾si
¾sifile2
file2est
estun unrépertoire,
répertoire,alors alorsfile1
file1estestdupliqué
dupliquésoussouslelemême
même
nom
nomrécursivement
récursivementdans danslelerépertoire
répertoirefile2.
file2.

cp
cp liste-de-fichiers
liste-de-fichiers repertoire
repertoire: :permet
permetde dedupliquer
dupliquerles
lesfichiers
fichiers
dans
danslelerépertoire.
répertoire.

N.ABGHOUR UNIX AVANCE


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 UNIX AVANCE


Suppression de fichiers : rm
rm fichiers…..
rmrmRemove
Remove
rmrm[-]
[-][-fir]
[-fir]filename...
filename...
Options
Options: :
-r-rDestruction
Destructionrécursive
récursive
-i-iMode
Modeinteractif
interactif
-f-fForce
Force

$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 UNIX AVANCE


Recherche de fichiers : find
find dir expr command
Rechercher
Rechercherdes
desfichiers
fichiersdans
dansune
unehiérarchie
hiérarchiede
derépertoires
répertoires
-name
-name : motif Fichier dont le nom de base (sans lesrépertoires
: motif Fichier dont le nom de base (sans les répertoiresdu
duchemin
chemind’accès),
d’accès),
correspond au motif du shell
correspond au motif du shell

-perm
-permmode
mode: :fichier
fichierdont
dontles
lesautorisations
autorisationsd’accès
d’accèssont
sontfixées
fixéesexactement
exactementau
aumode
mode
indiqué
indiqué

-type
-type type
type: :fichier
fichierdu
dutype
typedonné
donné(bloc
(blocb, b,caractère
caractèrec,c,répertoire
répertoired,
d,
tube nommé p, régulier f, liens symbolique l, socket
tube nommé p, régulier f, liens symbolique l, socket s) s)

-links
-links nn: :fichiers
fichiersayant
ayantnnliens
liens

-user
-user utilisateur
utilisateur: : fichier
fichierappartenant
appartenantààl’utilisateur
l’utilisateurindiqué
indiqué
-nouser
-nouser : fichier n’appartenant à aucun utilisateur nonnumérique
: fichier n’appartenant à aucun utilisateur non numérique
-group groupe : fichier appartenant au groupe
-group groupe : fichier appartenant au groupe indiqué indiqué
-nogroup
-nogroup: : fichier
fichiern’appartenant
n’appartenantààaucun
aucungroupe
groupenonnonnumérique
numérique
-size
-sizenn : : Fichier
Fichierutilisant
utilisantnnblocks.
blocks.

N.ABGHOUR UNIX AVANCE


Recherche de fichiers : find
find dir expr command
-inum
-inumnn: :fichier
fichierdont
dontlelenuméro
numérod’i-node
d’i-nodeestestnn
-newer
-newerfichier
fichier: :fichier
fichiermodifié
modifiéplus
plusrécemment
récemmentque quelelefichier
fichierindiqué
indiqué
-atime
-atimenn: : dernier
dernieraccès
accèsau aufichier
fichierililyyaan*24
n*24heures
heures
-mtime
-mtimenn: :fichier
fichierdont
dontles
lesdonnées
donnéesont ontété
étémodifiées
modifiéesililyyaan*24
n*24heures
heures
-ctime
-ctimenn : :dernière
dernièremodification
modificationdu dustatut
statutdu
dufichier
fichierililyyaan*24
n*24heures
heures

-print
-printaffiche
affichelelenom
nomcomplet
completdu dufichier
fichiersur
surlalasortie
sortiestandard
standard
-ls
-ls affiche
affichelelenom
nomdudufichier
fichieren
encours
coursdans
dansleleformat
format‘ls
‘ls–dils’
–dils’

-exec
-execcmd
cmd: :exécute
exécutelalacommande
commandejusqu’à
jusqu’àce
cequ’on
qu’onrencontre
rencontreunun‘ ‘;’,;’,
La
Lachaîne
chaîne\{\{\}\}est
estremplacée
remplacéepar
parlelenom
nomdu
dufichier
fichieren
encours
cours
de
detraitement
traitement

-ok
-okcomme
comme-exec
-execmais
maisinterroge
interroged’abord
d’abordl’utilisateur
l’utilisateur(demande
(demandede
deconfirmation)
confirmation)

N.ABGHOUR UNIX AVANCE


Recherche de fichiers : find
Exemple 1 : Chercher dans l’arborescence /usr les répertoires dont le nom
commence par ”local” :

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

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

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

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

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

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


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

N.ABGHOUR UNIX AVANCE


Recherche de fichiers : find
Exemple 1 : chercher dans le répertoire courant les fichiers exécutable
appartenant à l’utilisateur smi4
$ find . -user smi4 –perm +111 -type f -print

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

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

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

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

Exemple 4 :suppression des fichiers a.out ou .o datant de plus de 7 jours et


ayant au moins le droit d’exécution pour le propriétaire, les membres
du groupe et les autres

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


-mtime +7 –perm -111 -exec rm \{\} \;

N.ABGHOUR UNIX AVANCE


SHELL

N.ABGHOUR UNIX AVANCE


Type de SHELL

N.ABGHOUR UNIX AVANCE


Caractère spéciaux du Shell

N.ABGHOUR UNIX AVANCE


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

N.ABGHOUR UNIX AVANCE


Exemple : Quotation
$ ls
chat chien poisson
$ whoami
newbie
$ TITI=newbie-user
$ echo ‘whoami‘ et le ${TITI} et les c* ; ls
newbie et le newbie-user et les chat chien
chat chien poisson
$ echo ’‘whoami‘ et le ${TITI} et les c* ;ls’
‘whoami‘ et le ${TITI} et les c* ; ls
$ echo "‘whoami‘ et le ${TITI} et les c* ;ls"
newbie et le newbie-user et les c* ; ls
$

N.ABGHOUR UNIX AVANCE


Flux

1: écran
0: clavier
Processus 2: écran

ƒ L’entrée standard (stdin : 0)) : le flux d’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 UNIX AVANCE


Métacaractères de redirection

N.ABGHOUR UNIX AVANCE


Redirection de la sortie standard
™ cmd > fic : $ echo "Le Corbeau et le Renard" > file1
ƒ redirige la sortie de $ cat file1
la commande dans Le Corbeau et le Renard
le fichier qui est créé $ echo "Maitre Corbeau, Sur un arbre
s’il n’existait pas et perché," >> file1
dont le contenu est $ cat file1
écrasé sinon. Le Corbeau et le Renard Maitre Corbeau,
Sur un arbre perché,
$ echo "La Cigale et la Fourmi" > file1
$ cat file1
™ cmd >> fic : La Cigale et la Fourmi
ƒ redirige la sortie de $
la commande à la
suite du contenu du
fichier (qui doit
exister).

N.ABGHOUR UNIX AVANCE


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 $ ls abc file1 file2 > sortiestd
fichier qui est créé s’il ls : abc : No such file or directory
n’existait pas et dont $ cat sortiestd
le contenu est écrasé file1 file2
sinon. $ ls abc file1 file2 2> erreurstd
file1 file2
$ cat erreurstd
ls : abc : No such file or directory
™ cmd 2 >> fic :
$ ls abc file1 file2 2> erreurstd >
ƒ redirige la sortie sortiestd
d’erreur de la $ cat erreurstd
commande à la suite ls : abc : No such file or directory
du contenu du fichier
(qui doit exister). $

N.ABGHOUR UNIX AVANCE


Redirection de l’entrée standard
™ cmd < fic : $ wc < file1
ƒ l’entrée de la 1 5 23
commande provient du $ wc << EOF
fichier > Maître Corbeau, Sur
un arbre perché,
> Tenait dans son bec
un fromage,
™ cmd << etq :
> Maitre Renard, par
ƒ l’entrée de la l’odeur alléché,
commande provient des
lignes de commandes > Lui tint à peu près
suivantes jusqu’à la ce langage :
ligne ne contenant que > EOF
l’étiquette 4 25 138
$
N.ABGHOUR UNIX AVANCE
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 <==> cmd2 < fictmp
rm fictmp
$ ls fic1 fic2 | wc
2 2 10
$

N.ABGHOUR UNIX AVANCE


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

N.ABGHOUR UNIX AVANCE


Expression régulières étendues
™ Expressions régulières par ligne
ƒ . : (dot)un caractère quelconque
ƒ * : opérateur de répétition
ƒ [x y z] : x ou y ou z
ƒ [A-G] : intervalle
ƒ [^xyz] : sauf x, y ou z
ƒ ^ : début de ligne
ƒ $ : fin de ligne
ƒ \{m,n\} :répétions entre m et n fois
ƒ \ : échappement
N.ABGHOUR UNIX AVANCE
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

N.ABGHOUR UNIX AVANCE


Recherche de motifs dans un fichier: grep
grep [-ivn] regexpr fichier...
Afficher
Afficherles leslignes
lignescorrespondant
correspondantààun unmotif
motifdonné
donné
-v-v: :les
leslignes
lignescomplémentaires
complémentaires
-i-i : :sans
sanstenir
tenircompte
comptede delalacasse
casse(majuscule=minuscule)
(majuscule=minuscule)
-n-n: :enenprécédant
précédantles leslignes
lignessélectionnées
sélectionnéesparparleur
leurnuméro
numérode deligne
ligne
-G-G: :Interprète
Interprètelelemotif
motifcomme
commeune uneexpression
expressionrégulière
régulièresimple
simple
-F-F: :Interprète
Interprètelelemotif
motifcommecommeune uneexpression
expressionrégulière
régulièreétendue
étendue
-l-l : :n’affiche
n’afficheque quelelenom
nomdu dufichier
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 UNIX AVANCE
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
9 cat /etc/passwd | sort | more
™ Important : tous les processus formant un
pipe tournent en même temps.

N.ABGHOUR UNIX AVANCE


Filtre linux : tr
tr [options] chaine1 chaine2
trtr==Transposer
Transposerou ouéliminer
éliminerdes
descaractères
caractèressubstitution
substitutionouou
suppression
suppressiondedecaractères
caractèressélectionnés
sélectionnés
UnUn caractère appartenant à chaine1est
caractère appartenant à chaine1 estremplacé
remplacéparparlelecaractère
caractère
dedemême
mêmeposition
positiondans
danschaine2
chaine2
Options
Optionsprincipales:
principales:
-d-d: :suppression
suppressiondesdescaractères
caractèressélectionnés
sélectionnés
-s-s: :“aaaaa"
“aaaaa"dans chaine1Æ
danschaine1 Æ "a"
"a"dans
danschaine2
chaine2
-c-c : remplace jeu1 par son complément (tousles
: remplace jeu1 par son complément (tous lescaractères
caractèresn'appartenant
n'appartenant
pas
pasààchaine1
chaine1))
™ Format des expression de chaîne
ƒ [a-z] = segment de 26 caractères allant 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

N.ABGHOUR UNIX AVANCE


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 aaabc$#+&19a1$$$cd | tr -cs '[a-zA-Z0-9]' ‘\n'
Afficher chaque mot sur une ligne indépendante. Ceci tous
les caractères non alphanumériques en sauts de lignes,
puis regroupe les lignes blanches successives en un seul
saut de ligne
$ cat file |tr -s '\n'
Convertir les séquences de sauts de lignes en un seul saut
de ligne (ceci supprime les lignes blanches)

N.ABGHOUR UNIX AVANCE


Filtre : uniq
uniq OPTIONS fichier
Élimine
Élimineles leslignes
lignesdupliquées
dupliquéesdans
dansun
unfichier
fichiertrié
triépar
pardéfaut
défaut: :
OPTIONS:
OPTIONS:
-d
-d: :affiche
afficheseulement
seulementlesleslignes
lignesdupliquées
dupliquées
-u
-u: :affiche
afficheseulement
seulementlesleslignes
lignesnon
nondupliquées
dupliquées(par (pardéfaut)
défaut)
-c
-c: :donne
donnelelenombre
nombred’exemplaires
d’exemplairesde dechaque
chaqueligne
ligne

$ cat fichier $ cat fichier | uniq $ cat fichier | uniq -d


un un deux
deux deux quatre
deux trois $
trois quatre
quatre cinq
quatre $
cinq
$

N.ABGHOUR UNIX AVANCE


Filtre : cut
cut OPTIONS fichier
Supprime
Supprimeune unepartie
partiededechaque
chaqueligne
ligned’un
d’unfichier
fichierpar
pardéfaut
défaut: :
OPTIONS:
OPTIONS:
-d-dseparateur
separateur: :leleséparateur
séparateurdes deschamps
champs
-f-f listes
listesde
dechamps
champs: :les leschamps
champsséparés
séparés
-c-c: :Selection
Selectionsur surlelerang
rangduducaractere
caractere
-b-b: :Selection
Selectionsur surleleno
nod’octet
d’octet
-s-s(avec
(avec-f)
-f): :supprime
supprimeles leslignes
lignesvides
vides

$ 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 UNIX AVANCE


Filtre : sort
sort OPTIONS fichier
Trie
Trieles
leslignes
lignesd’un
d’unfichier
fichiertexte
texte

-n-n–numeric-sort
–numeric-sort dans
dansl’ordre
l’ordrenumérique
numérique
-d-d–dictionary-order
–dictionary-order dans
dansl’ordre
l’ordrealphabétique
alphabétique
-t-tcar
car lelecaractère
caractèreséparateur
séparateurde dechamps
champs
-k-k lelechamps
champsconsidéré
considérépourpourleletritri
-o-ofichier
fichier lelerésultat
résultatest
estmis
misdans
dansfichier
fichier
-u-u efface
effacetoutes
toutesles
leslignes
lignessauf
saufuneunequiquiont
ontlalamême
mêmeclé
clé

$ cat fichier $ cat fichier | sort -t : -k4 -n


0 :Casablanca:maroc:22 0 :Casablanca:maroc:22
1 :Rabat :maroc :37 3 :Marrakech :maroc :24
2 :Fes :maroc :35 2 :Fes :maroc :35
3 :Marrakech :maroc :24 1 :Rabat :maroc :37
$ $ ls | sort -d
. . . . . .

N.ABGHOUR UNIX AVANCE


Filtre : paste
paste OPTIONS fichier...
Regroupe
Regroupeles
leslignes
lignesdu
dumême
mêmen°
n°de
dedifférents
différentsfichiers
fichiers

$ cat fichier1 $ paste fichier1 fichier2


0 :Casablanca: 0 :Casablanca:maroc:22
1 :Rabat : 1 :Rabat :maroc :37
2 :Fes :maroc :35: 2 :Fes :maroc :35: 2 :Fes :maroc :35
maroc :24: maroc :24 : 3 :Marrakech :
$ cat fichier2 $
maroc:22
maroc :37
2 :Fes :maroc :35
3 :Marrakech
$

N.ABGHOUR UNIX AVANCE


Filtre : join
join OPTIONS fichier1 fichier2

Fusionner
Fusionnerlesleslignes
lignesdededeux
deuxfichiers
fichiersayant
ayantun
unchamp
champcommun
commun
-j1
-j1nn jointure
jointuresursurnième
nièmechamp
champdu dupremier
premierfichier
fichier
-j2
-j2nn jointure
jointuresursurnième
nièmechamp
champdu dudeuxième
deuxièmefichier
fichier
-t-tcar
car lelecaractère
caractèreséparateur
séparateurde
dechamps
champs

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


0 :Casablanca:maroc:022 0 :Casablanca:maroc:022: Industrielle
1 :Rabat :maroc :037 1 :Rabat :maroc :037: Administratif
2 :Fes :maroc :035 3 :Marrakech :maroc :024: Touristique
3 :Marrakech :maroc :024 $
$ cat file2
Touristique : 3
Industrielle : 0
Administratif : 1
$

N.ABGHOUR UNIX AVANCE


Programmation SHELL

N.ABGHOUR UNIX AVANCE


INTRODUCTION
™ Un script Shell est 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 le script

™ 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 UNIX AVANCE


Rôle d’un script shell

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

™ Son utilité :
ƒ automatisation d’actions
ƒ Contrôle de flux d’execution
ƒ utilisation de structures plus avancées :
9 boucles
9 Tests
9 ...

N.ABGHOUR UNIX AVANCE


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 a+x nom_script_shell

4. Exécuter le script
ƒ $ ./nom_script_shell
N.ABGHOUR UNIX AVANCE
Exemple : Structure d’un script shell

#!
#! Sur
Surlalapremière
premièreligne
ligne: :interpréteur
interpréteurduduprésent
présentscript
script
(# ! suivi du chemin complet du shell utilisé
(# ! suivi du chemin complet du shell utilisé plus plus
d’éventuels
d’éventuelsarguments)
arguments)
## commentaires
commentairesLes Lesligne
lignededecommentaire
commentairesont sont
précédées
précédéesde de##
code
code Le
Lecode
codeest
estdonné
donnéligne
lignepar
parligne
ligne

$ cat ./progdebut $ chmod a+x progdebut


#!/bin/sh $ ./progdebut
# 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 UNIX AVANCE


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 UNIX AVANCE


Passage de paramètres à un Shell Script : exemple 1
$$ cat
cat script2.sh
script2.sh
## !/bin/sh
!/bin/sh
## Mon
Mon programme
programme qui
qui affiche
affiche les
les paramètres
paramètres de
de la
la ligne
ligne de
de
## commande
commande
echo
echo "*
"* Le
Le nom
nom du
du programme
programme est
est :: $0"
$0"
echo
echo "*
"* Le
Le troisième
troisième paramètre
paramètre est
est :: $3"
$3"
echo
echo "*
"* Le
Le nombre
nombre dede paramètre
paramètre est
est :: $#"
$#"
echo
echo "*
"* Tous
Tous les
les paramètres
paramètres (mots
(mots individuels)
individuels) :: $*"
$*"
echo
echo "*
"* Tous
Tous les
les paramètres
paramètres :: $@"
$@"
exit
exit 00
$ ./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 UNIX AVANCE


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

$$ cat
cat script3.sh
script3.sh
#!/bin/sh
#!/bin/sh
echo
echo "Nombre
"Nombre dede parametres
parametres == "" $#$#
echo
echo "Paramètre
"Paramètre numéro
numéro 00 == "" $0
$0
echo
echo "Paramètre
"Paramètre numéro
numéro 11 (nom
(nom dudu répertoire)
répertoire) == "" $1
$1
echo
echo
echo
echo "No
"No du
du processus
processus en
en cours
cours ($0)
($0) == $$"
$$"
mozilla
mozilla &&
echo
echo "No
"No du
du dernier
dernier processus
processus en en background
background (mozilla)=
(mozilla)= $!"
$!"
echo
echo
date
date
echo
echo "Nombre
"Nombre dede fichiers
fichiers dans
dans lele repertoire
repertoire $1
$1 =";ls
=";ls $1|
$1| wc
wc -w
-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 UNIX AVANCE


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

$$ cat
cat script3.sh
script3.sh
#!/bin/sh
#!/bin/sh
ls
ls
echo
echo "exemple
"exemple code
code de
de retour
retour OK
OK (ls)=
(ls)= $? $? ""
ls
ls toto
toto
echo
echo "exemple
"exemple code
code de
de retour
retour KO
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 UNIX AVANCE


Passage de paramètres à un Shell Script: précaution
$$ cat
cat ./script4_faux.sh
./script4_faux.sh
## !/bin/sh
!/bin/sh
echo
echo $1
$1 $2
$2 $3
$3 $4
$4 $5
$5 $6
$6 $7
$7 $8
$8 $9
$9 $10
$10 $11
$11 $12
$12
exit
exit 00
$ ./script4_faux.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
cat script4_vrai.sh
script4_vrai.sh
## !/bin/sh
!/bin/sh
echo
echo $1
$1 $2
$2 $3
$3 $4
$4 $5
$5 $6
$6 $7
$7 $8
$8 $9
$9 ${10}
${10} ${11}
${11} ${12}
${12} exit
exit 00

$ ./script4_vrai.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 UNIX AVANCE
Décalage de paramètres : shift
$$ cat
cat script5.sh
script5.sh
## !/bin/sh
!/bin/sh
echo
echo "$#
"$# :: arg1
arg1 == $1
$1 ,, arg2
arg2 == $2
$2 ;; total
total :: $@"
$@"
shift
shift
echo
echo "$#
"$# :: arg1
arg1 == $1
$1 ,, arg2
arg2 == $2
$2 ;; total
total :: $@"
$@"
shift
shift
echo
echo "$#
"$# :: arg1
arg1 == $1
$1 ,, arg2
arg2 == $2
$2 ;; total
total :: $@"
$@"
shift
shift
echo
echo "$#
"$# :: arg1
arg1 == $1
$1 ,, arg2
arg2 == $2
$2 ;; total
total :: $@"
$@"
shift
shift
exit
exit 00
$ ./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 UNIX AVANCE


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 UNIX AVANCE


Lecture interactive : read
read variable
La
Lacommande
commandeinterne
interneread
readattend
attendune
uneentrée
entréede
del’utilisateur
l’utilisateuret
etl’affecte
l’affecte
ààlalavariable
variablespécifiée.
spécifiée.

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

N.ABGHOUR UNIX AVANCE


calculs numériques : expr
expr chaine
évalue
évaluelalachaîne
chaînede
decaractère
caractèrereprésentant
représentantdes
desopérations.
opérations.

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

N.ABGHOUR UNIX AVANCE


Calcul numérique : $((expr_arithmetique))
$((expression_arithmétique))
évalue
évaluel’expression
l’expressionarithmétique
arithmétiqueentre
entreparenthèse.
parenthèse.

Exemple :

$v=10
$v=10
$x=20
$x=20
$$(($v+$x))
$$(($v+$x))
30
30
$$(($x*$v))
$$(($x*$v))
200
200

N.ABGHOUR UNIX AVANCE


Commande : exec
exec [commande [arg … ]]
La
Lacommande
commandeexec execexécute
exécutecommande
commandeààlalaplaceplacedu
duprocessus
processus(shell)
(shell)
courant:
courant:
••pas
pasde decréation
créationde
denouveau
nouveauprocessus
processus
••arg,
arg, . . . deviennent les argumentsde
. . . deviennent les arguments decommande
commande
••sisicommande
commande n’existe pas, le shell termineavec
n’existe pas, le shell termine avecun uncode
codede
deretour
retour
non nul (127, par exemple).
non nul (127, par exemple).
Seuls
Seuls les descripteursde
les descripteurs defichiers
fichiers0,
0,11et
et22sont
sonttransmis
transmisààlalacommande.
commande.
Sans
Sansargument,
argument,les lesredirections
redirectionsimposées
imposéesààexecexecsont
sontpermanentes
permanenteset et
appliquées
appliquéesau aushell
shellcourant.
courant.

$ cat test_exec $ sh
#!/bin/sh $ exec 1> /tmp/out
read cmd $ date
exec $cmd $ echo bonjour
echo ligne 1 $ exit
echo ligne 2 $cat /tmp/out
$ test_exec 25-11-2010
date bonjour
25-11-2010 $
$
N.ABGHOUR UNIX AVANCE
Commande : eval
eval commande
La
Lacommande
commandeest
estinterprétée
interprétéepuis
puislelerésultat
résultatde
del’interprétation
l’interprétationest
estexécuté
exécuté

$ cat test_eval
#!/bin/sh
read cmd
# supposons que l’utilisateur saisisse « /etc/passwd"
# Exemple
# 1) interprétation de "file $cmd" --> « wc -l /etc/passwd »
# 2) execution de « wc –l /etc/passwd »
eval " wc –l $cmd"
# Ce qui suit est exécuté
echo fin
$ ./test_eval
/etc/passwd
100
fin
$
N.ABGHOUR UNIX AVANCE
Commandes de test : test, [
test expression ou [ expression ]

permet
permetd’évaluer
d’évaluerune
uneexpression.
expression.
••Si
Sivrai,
vrai,renvoie
renvoie0,
0,sinon,
sinon,renvoie
renvoie1.
1.
••S’il
S’iln’y
n’yaapas
pasd’expression,
d’expression,renvoie
renvoie11(false).
(false).
test
testexpression
expressionest estéquivalent
équivalentàà [[expression
expression]]
-d-dficfic ÆÆ vrai
vraisisilelefichier
fichierexiste
existeetetest
estun
unrépertoire
répertoire
-f-f fic
fic ÆÆ vrai
vraisisilelefichier
fichierexiste
existeetetest
estun
unfichier
fichier««ordinaire»
ordinaire»
-h-hficfic ÆÆ vrai
vraisisilelefichier
fichierexiste
existeetetest
estun
unlien
liensymbolique
symbolique
-x fic
-x fic ÆÆ vrai
vrai si le fichier existe et est autoriséen
si le fichier existe et est autorisé enexécution
exécution
-w fic
-w fic ÆÆ vrai si le fichier existe et est autorisé en écriture
vrai si le fichier existe et est autorisé en écriture
-r-rfic
fic ÆÆ vrai
vraisisilelefichier
fichierexiste
existeetetest
estautorisé
autoriséen enlecture
lecture
ch1 = ch2 Æ
ch1 = ch2 Æ vrai si les deux chaînes sont identiques
vrai si les deux chaînes sont identiques
ch1
ch1!= ch2 Æ
!=ch2 Æ vrai
vraisisiles
lesdeux
deuxchaînes
chaînessont
sontdifférentes
différentes
n1 -eq n2
n1 -eq n2 Æ Æ sisiles
les deux nombres sont numériquementégaux
deux nombres sont numériquement égaux
n1n1-ne -nen2n2 ÆÆ sisiles deux nombres sont numériquement
les deux nombres sont numériquement inégaux inégaux
n1 -lt
n1 -lt n2n2 ÆÆ sisin1
n1estestnumériquement
numériquementinférieur
inférieurààn2n2
n1 -gt
n1 -gt n2 n2 ÆÆ sisin1
n1 est numériquement supérieur àn2
est numériquement supérieur à n2

N.ABGHOUR UNIX AVANCE


Commandes de test : test, [
test expression ou [ expression ]
n1
n1-le
-len2
n2 Æ
Æ sisin1
n1est
estnumériquement
numériquementinférieur
inférieurououégal
égalàn2
àn2
n1
n1-ge
-gen2n2 Æ
Æ sisin1
n1est
estnumériquement
numériquementsupérieur
supérieurou ouégal
égalàn2
àn2
!!exp1
exp1 Æ
Æ vrai
vraisisil’expression
l’expressionest
estfausse
fausse(et(etvice-versa)
vice-versa)
exp1
exp1-a-aexp2
exp2 Æ
Æ vrai
vraisisiles
lesdeux
deuxexpressions
expressionssont
sontvraies
vraies(AND)
(AND)
exp1
exp1-o-oexp2
exp2 Æ
Æ vrai
vraisisiauaumoins
moinsune
uneexpression
expressionest estvraie
vraie(OR)
(OR)

$ test -f fic-existe $ [ 3 -lt 42 -a -x fic-executable ]


$ echo $? $ echo $?
0 0
$ test -f fic-nexiste-pas $ [ 3 -gt 42 -a -x fic-executable ]
$ echo $? $ echo $?
1 1
$ $

N.ABGHOUR UNIX AVANCE


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
#!/bin/sh
if
if commande
commande [options]
[options] parametres
parametres >> resultats.txt
resultats.txt 2>
2> erreurs.txt
erreurs.txt
then
then
## code
code de
de retour
retour (exit)
(exit) valant
valant 00
bloc-1-de-commandes-unix
bloc-1-de-commandes-unix
else
else
## code
code de
de retour
retour (exit)
(exit) différent
différent de
de 00
bloc-2-de-commandes-unix
bloc-2-de-commandes-unix
fi
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 UNIX AVANCE


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

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

Exemple 2 :

if
if ls
ls file
file >> /dev/null
/dev/null 2>&1
2>&1
then
then echo
echo "la
"la commande
commande ls
ls file
file aa réussi"
réussi"
else echo "la commande ls file a
else echo "la commande ls file a échoué"échoué"
fi
fi

N.ABGHOUR UNIX AVANCE


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

Exécute
Exécutelalaliste-commandes
liste-commandessuivant
suivantlelemotif
motifreconnu.
reconnu.
Le
Lemotif
motifààreconnaitre
reconnaitrepeut
peuts’exprimer
s’exprimersous sous forme
formed’expression
d’expressionrationnelle
rationnelle
utilisant
utilisantles
lesméta-caractères
méta-caractères:*:*??[ [] ]--

N.ABGHOUR UNIX AVANCE


Exemple avec case-esac
$$ cat
cat question
question
#read
#read reponse
reponse
case
case $1
$1 in
in
[Yy][eE][sS]
[Yy][eE][sS] || [oO][uU][iI
[oO][uU][iI ]] || OK)
OK) echo
echo "Tu
"Tu approuves"
approuves" ;; ;;
[Nn][oO])
[Nn][oO]) echo
echo "Tu
"Tu désapprouves"
désapprouves" ;; ;;
bof
bof )) echo
echo ""décides
décides toi"
toi" ;; ;;
pfff*)
pfff*) echo
echo "Pas
"Pas la
la peine
peine de
de répondre"
répondre" ;; ;;
*)
*) echo
echo "réponse
"réponse idiote"
idiote" ;; ;;
esac
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 UNIX AVANCE


Boucle for-do-done
for variable in liste de mots
do
liste-commandes
done

La
Lavariable
variableprend
prendsuccessivement
successivementles
lesvaleurs
valeursde
delalaliste
listede
demots,
mots,et
et
pour
pourchaque
chaquevaleur,
valeur,liste-commandes
liste-commandesest
estexécutée.
exécutée.

N.ABGHOUR UNIX AVANCE


Exemple avec for-do-done

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

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

N.ABGHOUR UNIX AVANCE


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

La
Lavaleur
valeurtestée
testéepar
parlalacommande
commandewhile whileest
estl’état
l’étatdedesortie
sortiede
delaladernière
dernièrecommande
commande
de liste-commandes-1.
de liste-commandes-1.
Si
Sil’état
l’étatde
desortie
sortieest
est0,0,alors
alorsleleshell
shellexécute
exécuteliste-commandes-2
liste-commandes-2
puis
puisrecommence
recommencelalaboucle.
boucle.

N.ABGHOUR UNIX AVANCE


Exemple avec while-do-done
$$ cat
cat test_while1
test_while1 $$ cat
cat test_while2
test_while2
#!/bin/sh #!/bin/sh
#!/bin/sh
#!/bin/sh
while compteur=5
while [[ "$1"
"$1" ]] compteur=5
while
do
do while [[ $compteur
$compteur -ge
-ge 00 ]]
do
do
echo
echo $1
$1 echo
echo $compteur
$compteur
shift
shift compteur=‘expr
compteur=‘expr $compteur
$compteur -- 1‘
1‘
done
done done
done

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


un 5
deux trois 4
quatre 3
2
1
0

N.ABGHOUR UNIX AVANCE


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

Le
Leshell
shellteste
testel’état
l’étatde
desortie
sortiede
deliste-commandes-1.
liste-commandes-1.
Si
Sil’état
l’étatde
desortie
sortieest
est1,
1,alors,
alors,liste-commandes-2
liste-commandes-2 est
estexecutée
executéepuis
puislala
boucle
boucleest estrecommencée.
recommencée.

N.ABGHOUR UNIX AVANCE


Exemple avec until-do-done
$$ cat $$ cat
cat test_until2
test_until2
cat test_until1
test_until1 #!/bin/sh
#!/bin/sh #!/bin/sh
#!/bin/sh compteur=5
until compteur=5
until [[ "$1"
"$1" == ""
"" ]] until
until [[ $compteur
$compteur -lt
-lt 00 ]]
do
do do
do
echo
echo $1 echo
$1 echo $compteur
$compteur
shift
shift compteur=‘expr
compteur=‘expr $compteur
$compteur -- 1‘
1‘
done
done done
done

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


un 5
deux trois 4
quatre 3
2
1
0

N.ABGHOUR UNIX AVANCE


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

break ou break n
permet
permetdedesortir
sortird’une
d’uneboucle
bouclefor,
for,while
whileououuntil.
until.
Si
Sinnest
estprécisé,
précisé,ililindique
indiquelelenombre
nombred’imbrication
d’imbricationconcernée
concernéepar
parlelebreak.
break.

continue n
permet
permetdedepasser
passerààl’itération
l’itérationsuivante
suivanted’une
d’uneboucle
bouclefor,
for,while
whileou
ouuntil.
until.
Si
Sinnest
estprécisé,
précisé,ililindique
indiquelelenombre
nombred’imbrication
d’imbricationconcernée
concernéeparparlelecontinue.
continue.

N.ABGHOUR UNIX AVANCE


Exemple : break, continue
$$ cat
cattest_continue
test_continue
#!/bin/sh
#!/bin/sh
for
for ii in
in 11 22 33 44
do
do
for
for jj inin 11 22 33 44 55
do
do
if
if [[ $j
$j –eq
–eq 22 ]]
then
then
continue
continue 22
else
else
echo
echo "[$i,$j]"
"[$i,$j]"
fi
fi
done
done
done
done
$./test_continue
[1,1]
[2,1]
[3,1]
[4,1]
N.ABGHOUR UNIX AVANCE
Déboguage d’un script shell : set -x
™ Placer en début de script la ligne suivante :
ƒ set -x
™ Exemple:
$$ cat
cat test_set-x
test_set-x
#!/bin/sh
#!/bin/sh
set
set -x
-x
echo
echo $HOME
$HOME

$ ./test_set-x
+echo /home/nabghour
/home/nabghour

N.ABGHOUR UNIX AVANCE


Listes de commandes
™ Une séquence de commande s’écrira :
commande1 ; commande 2 ;...
Ou
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

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

N.ABGHOUR UNIX AVANCE


Fonction
™ On peut regrouper les commandes au sein d’une fonction.
™ Une fonction se définit de la manière suivante :
Nom_fonction ()
{
liste-commandes
}
™ 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 UNIX AVANCE


Code de retour : return, exit

return n
Renvoie
Renvoieune
unevaleur
valeurde
deretour
retourpour
pourlalafonction
fonctionshell.
shell.

exit n
Provoque
Provoquel’arrêt
l’arrêtdu
dushell
shellcourant
courantavecavecununcode
coderetour
retourde
dennsicelui-ci
sicelui-ciest
est
spécifié.
spécifié.S’il
S’iln’est
n’estpas
passpécifié,
spécifié,ilils’agira
s’agirade
delalavaleur
valeurderetour
deretourde
delaladernière
dernière
commande
commandeexécutée.
exécutée.

N.ABGHOUR UNIX AVANCE


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

trap ”commandes” numéro_de_signal


Intercepte
Interceptelelesignal
signaldonné
donnélorsqu’il
lorsqu’ilse
seprésente
présenteeteteffectue
effectuelalacommande.
commande.
L’exécution
L’exécutionse sepoursuit
poursuitensuite
ensuiteen
enreprenant
reprenantààl’endroit
l’endroitde
del’interruption.
l’interruption.

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

kill -signal pid


Envoyer
Envoyerun
unsignal
signalààun
unprocessus
processusde
depid
piddonné
donné

N.ABGHOUR UNIX AVANCE


Gestion des signaux
™ Les commandes
ƒ top:
9$ top
ƒ bg :
9$ bg
ƒ fg :
9$ fg
ƒ jobs :
9$ jobs
ƒ ps :
9$ ps
N.ABGHOUR UNIX AVANCE

Vous aimerez peut-être aussi