Introduction aux systèmes d'exploitation
Introduction aux systèmes d'exploitation
SYSTÈME D’EXPLOITATION I
2ème année IMA – S3
VOLUME HORAIRE
❖ Cours : 24h (2h par séance)
❖ Travaux dirigés : 12h (1h30 par séance)
❖ Travaux pratiques : 10h (1h30 par séance)
❖ Evaluation des connaissances et des
compétences : 4h
Université Chouaïb Doukkali
Faculté Polydisciplinaire de Sidi Bennour
2ème année IMA – S3
EVALUATION DU MODULE
❖ Note du module :
22
LE SYSTÈME D’EXPLOITATION (OPERATING
SYSTEM OU OS OU SE)
En tant que machine étendue:
➢Le système d’exploitation correspond à « l’interface » entre les
applications et le matériel.
➢De ce point de vue le système d’exploitation peut être assimilé à une
machine étendue ou virtuelle plus facile à programmer ou à utiliser
que le matériel :
✓ Un programmeur va utiliser le système d’exploitation par
l’intermédiaire “ d’appels système ”.
✓ Un utilisateur peut lui aussi – dans une certaine mesure – manipuler
un système d’exploitation, sans pour autant avoir à créer un
programme (commandes shell).
Partie 1 : Introduction 23
LE SYSTÈME D’EXPLOITATION (OPERATING
SYSTEM OU OS OU SE)
En tant que gestionnaire de ressources :
➢ Les différents composants d’un ordinateur doivent coopérer et partager des
ressources.
➢ Dans cette optique, le travail du système d’exploitation consiste à :
✓ ordonnancer,
✓ contrôler l’allocation des ressources :
• processeurs,
• mémoires,
• périphériques d’E/S,
• ...
entre les différents programmes qui y font appel.
Partie 1 : Introduction 24
LE SYSTÈME D’EXPLOITATION (OPERATING
SYSTEM OU OS OU SE)
➢ Le SE abstrait la machine
➢ Cache certains détails que
l’utilisateur n’a pas à connaître pour
exploiter la machine
➢ Présente à l’utilisateur une machine
virtuelle facile à utiliser et à
programmer.
➢ Offre des services abstraits
➢ Connait les détails internes et
garantie l’utilisation des services
concrets de la machine.
QUELS SONT LES SERVICES
OFFERTS PAR UN OS
??
LES SERVICES OFFERTS PAR UN OS
➢ Facilité de la création de programme.
➢ Editeurs, compilateurs, débogueurs, etc.
➢ Exécution du programme
➢ Chargement en mémoire
➢ Gestion des E / S et initialisation de fichier.
➢ Accès aux E / S et aux fichiers
➢ Traitement des spécificités des E/S et des
formats de fichiers.
➢ Accès au système
➢ Résolution des conflits de ressources.
➢ Protection de l'accès aux ressources et aux
données.
LES SERVICES OFFERTS PAR UN OS
➢ Après le BIOS, le chargeur lit les informations du disque de démarrage et charge le noyau du
système d’exploitation en mémoire.
➢ Il prépare la machine pour que le noyau du système d’exploitation puisse prendre le contrôle du
système.
STRUCTURE EXTERNE D’UN SE :
LE GESTIONNAIRE DE MÉMOIRE
La mémoire est une ressource importante qui doit être gérée avec prudence.
Sa gestion est la tâche du gestionnaire de mémoire. Celui-ci doit:
➢ Connaître les parties libres et les parties occupées de la mémoire,
➢ Allouer de la mémoire aux processus qui en ont besoin,
➢ Récupérer la mémoire utilisée par un processus lorsque celui-ci se termine
et traiter le va-et-vient (swapping en anglais) entre le disque et la mémoire
principale lorsque cette dernière ne peut pas contenir tous les processus.
LES PRINCIPAUX SYSTÈMES
D’EXPLOITATION
MS-DOS :
o Introduction : MS-DOS est l'un des premiers systèmes d'exploitation pour PC
les plus connus. Il est mono-utilisateur et mono-tâche.
o Évolution : Pour suivre les évolutions matérielles et les demandes des
utilisateurs, des couches logicielles additionnelles ont été ajoutées.
o Remplacement : MS-DOS a été rapidement remplacé par les systèmes
d'exploitation Windows.
Mac OS :
o Introduction : Développé par Apple, Mac OS a été lancé pour le Macintosh en
1984.
o Position : macOS est un concurrent majeur des systèmes Windows.
LES PRINCIPAUX SYSTÈMES
D’EXPLOITATION
Unix :
o Introduction : Unix est un système d'exploitation qui a été distribué
gratuitement, donnant naissance à de nombreuses variantes.
o Variantes Connues :
o Unix System V : Développé par AT&T et Bell Labs, c'est une évolution de la version
originale.
o Unix BSD : Développé à l'Université de Californie à Berkeley.
o Principaux Systèmes Unix pour les Architectures Intel :
o SCO OpenServer et UnixWare : Développés par SCO (Santa Cruz Operation).
o Solaris : Développé par Sun Microsystems.
o BSD (Berkeley Software Distribution)
o Trois Unix Dominants sur le Marché des Serveurs :
o HP-UX : Développé par Hewlett-Packard.
o Sun Solaris : Développé par Sun Microsystems.
o IBM AIX : Développé par IBM.
LES PRINCIPAUX SYSTÈMES
D’EXPLOITATION
Linux :
o Introduction : Linux a émergé comme une alternative populaire aux systèmes
Unix, à Novell NetWare et à Windows NT/2000 Server.
o Linux est multi-utilisateurs, multi-tâches, stable et gratuit.
o Principales Distributions de Linux :
▪ Red Hat Enterprise Linux (RHEL)
▪ Debian
▪ Caldera : Désormais intégré dans SCO.
▪ Ubuntu
LA FAMILLE DE WINDOWS
➢ 1992 : Lancement de Windows 3.10 et Windows pour Workgroups 3.11, axés sur le multitâche coopératif et l'interface multi-fenêtres.
➢ 2000 : Commercialisation de Windows 2000 en versions Professionnel et Serveur, ainsi que Windows Millennium.
➢ 2015 : Lancement de Windows 10, avec des améliorations notables telles que l'introduction du menu Démarrer révisé, des bureaux virtuels, et la fonctionnalité Cortana pour
l'assistance vocale.
➢ 2021 : Introduction de Windows 11, qui apporte un design modernisé avec un nouveau menu Démarrer, des coins arrondis pour les fenêtres, et une intégration renforcée avec
Microsoft Teams.
SYSTÈMES D’EXPLOITATION
UNIX /LINUX
SYSTÈME D’EXPLOITATION : UNIX
➢Multi-utilisateurs : le système identifie des personnes
logiques et permet à ces personnes d'utiliser le système
dans certaines limites.
➢Multi-tâches : le système est étudié pour exécuter
plusieurs programmes en même temps, grâce au concept
de "temps partagé”.
➢Multi-plateforme : Unix n'est pas un système dédié à un
processeur, mais c'est une famille de systèmes que l'on
retrouve sur une multitude de plates-formes.
ARCHITECTURE ET CARACTÉRISTIQUES
❑ GPL :General Public License, est une licence de logiciel libre créée par
la Free Software Foundation (FSF). Elle met en œuvre le principe du
copyleft.
DISTRIBUTIONS UNIX
➢ Certains de ces logiciels sont meilleurs que ceux que l'on trouve sous Windows.
➢ Parce qu'Unix était payant et devenait de plus en plus cher ! Richard Stallman a voulu Richard Stallman
réagir en proposant une alternative gratuite : le projet GNU était né. Fondateur du projet GNU
Bon à savoir :
✓ Mac OS X est lui aussi basé sur Unix.
✓ En revanche, MS-DOS et Windows sont complètement à part.
GNU EST UN SYSTÈME D’EXPLOITATION LIBRE
➢ GNU ne devait pas seulement être un OS "gratuit". Il devait être aussi un OS
"libre".
Quelle différence ?
➢ Au contraire, Windows est un OS propriétaire dont le code source est Richard Stallman
Fondateur du projet GNU
jalousement gardé par Microsoft.
❖ tandis que Richard Stallman créait les programmes de base (programme de copie de
fichier, suppression de fichier, éditeur de texte),
❖ Linus s'était lancé dans la création du "coeur" d'un système d'exploitation (le noyau).
NAISSANCE DU PROJET GNU/LINUX
➢ Le projet GNU (programmes libres) et Linux (noyau d'OS) ont fusionné
pour créer GNU/Linux.
➢Théoriquement, on doit donc parler de GNU/Linux.
➢ C'est toutefois un peu difficile à écrire et prononcer, et par abus de
langage on dit souvent juste "Linux". Linus Torvalds,
Créateur de linux
Richard Stallman
Fondateur du projet
GNU
RÉCAPITULATIF
Ce qu’il faut retenir dorénavant c’est le schéma suivant :
LES DISTRIBUTIONS DE LINUX
➢ On peut y trouver de nombreux logiciels différents et il existe des
centaines de façons différentes de l'installer.
➢ Pour simplifier la vie des utilisateurs et pour leur permettre de faire un
choix, on a créé différentes distributions de Linux.
➢ C'est un concept qui n'existe pas vraiment sous Windows.
Voici ce qui peut différer d'une distribution à l'autre :
❖ L'installation (elle peut être très simplifiée comme très compliquée).
❖ Lagestion de l'installation des programmes. Si elle est bien faite et centralisée, elle
peut rendre l'installation de nouveaux logiciels plus simple que sous Windows.
❖ Les programmes préinstallés sur l'ordinateur (par exemple Windows est livré avec
Internet Explorer et Windows Media Player).
LES DISTRIBUTIONS DE LINUX
❖ Une distribution c'est un peu l'emballage de Linux. Le
cœur(noyau), lui, reste le même sur toutes les distributions.
❖ Quelle que soit la distribution que vous installez, vous avez un
Linux compatible avec les autres. Certaines distributions sont juste
plus ou moins faciles à prendre en main.
➢Les différentes distributions existantes :
❖ Il existe un grand nombre de distributions Linux différentes. Mais bon
comment faire un bon choix : en effet, quand on débarque la première fois
on ne sait pas trop laquelle choisir... surtout que toutes sont gratuites.
LES DISTRIBUTIONS DE LINUX
➢Linux est le plus souvent diffusé sous forme d’une distribution, un
ensemble de programmes (noyau, sources des utilitaires,
commandes, applications) formant après installation un système
complet.
POURQUOI AUTANT DE DISTRIBUTIONS
➢ Chaque distribution a sa cible ; certaines sont orientées :
❖ Sur la facilité d’utilisation,
% yppasswd
Changing NIS password for USER on MACHINE
Old password: --entrez votre mot de passe courant
New password: --entrez votre nouveau mot de passe
Retype new password: --rentrez votre mot de passe
NIS entry has changed on filemon
LES SHELLS
QU’APPELLE T’ON UN SHELL
➢Un shell est la liaison la plus
élémentaire entre l'utilisateur
et le système d'exploitation,
c'est-à-dire le programme de
gestion de la ligne de
commande.
➢Les commandes saisies sont
interprétées par le shell et
transmises au système
d'exploitation.
QUEL SHELL ?
➢ Le shell affiche un «prompt» et attend les commandes de l’utilisateur
➢ Il en existe plusieurs avec des fonctionnalités et des interfaces différentes les
uns des autres
❖ sh : Bourne Shell (shell standard)
❖ ksh : Korn Shell
❖ csh : C Shell
❖ bash : GNU (Bourne Again Shell)
➢ Pour savoir quel shell est utilisé, tapez :
Fichiers de
stockage Mémoire vive
Répertoires 107
d’arrangement
SYSTÈMES DE FICHIERS
Un système de fichier est l'agencement logique et structuré des données sur un support de stockage.
➢ Supports courants :
• Disque dur
• Clé USB
• DVD
• Autres supports de stockage numériques
➢ Fonctionnement :
• Les informations ne sont pas écrites aléatoirement sur les disques.
• Une organisation spécifique est nécessaire pour stocker à la fois les fichiers et les
données qu'ils contiennent.
• C'est le système de fichiers qui définit cette structure et permet de gérer les fichiers de
manière efficace.
➢ Exemples de systèmes de fichiers :
• ext4 (Linux)
• NTFS (Windows)
• FAT32 (USB, DVD)
SYSTÈMES DE FICHIERS
Une arborescence est une organisation logique des fichiers sur un ou plusieurs
systèmes de fichiers.
➢ Structure hiérarchique :
• Un point de départ : le répertoire racine ("root").
• Des sous-répertoires imbriqués, organisés de
manière logique.
➢ Exemple de structure :
• / (root)
• /home
• /usr
• /etc
• /bin
SYSTÈMES DE FICHIERS
Un répertoire est une structure qui permet de ranger
et organiser les fichiers.
➢ Fonction principale : Organisation des fichiers en
groupes logiques.
➢ Création : Il est possible de créer plusieurs
répertoires pour classer les fichiers selon leur
utilité.
➢ Équivalent : Folder ou Collection dans d'autres
systèmes d'exploitation.
111
SYSTÈMES DE FICHIERS
Le système de fichiers est organisé en une structure arborescente dont les
nœuds sont des répertoires et les feuilles des fichiers ordinaires.
Racine de l’arborescence
Répertoire Ayoub
Sous-Répertoire
Fichier
ARBORESCENCE LINUX
ARBORESCENCE TYPIQUE DE LINUX
Racine du système
boot Fichiers de démarrage du système contenant le noyau
✓ Le « . » → Répertoire courant
✓ Le « .. » → Répertoire parent
✓ Le « ~ » → Répertoire personnel de l’utilisateur courant
✓ Le « / » → Répertoire racine de l’arbre
nnée
1iv1e5rsi
aire
LES TYPES DE FICHIERS LINUX
➢ Le système Linux offre trois types de fichiers principaux :
a. Les fichiers ordinaires (regular files).
b. Les fichiers répertoires ou répertoires (directories).
c. Les fichiers spéciaux. Ils désignent les périphériques, les tubes ou autres supports de
communication.
❑ Les fichiers spéciaux sont de plusieurs types, à savoir :
❖l : un lien symbolique
❖b : un fichier spécial de type bloc (périphériques …)
❖c : un fichier spécial de type caractère (périphériques …)
❖s : socket
❖…
116
LES RÉPERTOIRE PERSONNEL – LE TILDE
104
COMMANDE DE MANIPULATION DES
RÉPERTOIRES
➢ La commande permettant de se déplacer dans une arborescence est :
cd repertoire (change directory)
% pwd
/home/profs/ayoub
% cd Enseignement
% pwd
/home/profs/ayoub/Enseignement
$ cd /home/ayoub/Desktop
$ pwd
/home/ayoub
$ cd Desktop
COMMANDE DE MANIPULATION DES
RÉPERTOIRES : LES CHEMINS D’ACCÈS
COMMANDE DE MANIPULATION DES
RÉPERTOIRES : LES CHEMINS D’ACCÈS
COMMANDE DE MANIPULATION DES
RÉPERTOIRES
➢ La commande servant à créer des répertoires est :
• mkdir [options] répertoires… (make directory)
➢ pour créer une arborescence entière, on utilise l’option –p
Exemple : créer l’arborescence ~/TPLinux/Groupe1
mkdir –p TPLinux/Groupe1
➢ La commande servant à supprimer un répertoire est :
• rmdir repertoire (remove directory) Le répertoire doit être vide
• rmdir -p repertoire : pour supprimer les sous répertoires qui peuvent
figurer dans le chemin d’accès à un répertoire s’ils sont vides.
• rm -r repertoire : Si le répertoire est non vide
LA COMMANDE DU
La commande du : permet d’afficher la taille d’une arborescence.
Syntaxe : du [options] [répertoire]
OPTIONS DE LA COMMANDE DU
Option description
-a Affiche les statistiques pour tous les fichiers, pas
seulement les répertoires.
Le système identifie un fichier non pas par son nom, mais par son numéro
d’inode.
LES DONNÉES D’UN FICHIER
Dans Unix, les fichiers sont représentés comme des séquences d’octets, mais différents aspects de
gestion de données sont importants :
➢ Bloc de données :
❖ Les fichiers sont divisés en blocs de données stockés sur le disque. L’i-node contient des
pointeurs vers ces blocs.
❖ Le nombre de blocs peut varier selon la taille du fichier.
➢ Données utilisateur :
❖ Les données réelles contenues dans le fichier, qu’il s’agisse de texte, de scripts, ou de binaire.
➢ Métadonnées :
❖ Les métadonnées d’un fichier sont stockées dans l’i-node (propriétaire, permissions, etc.).
➢ Cache disque :
❖ Le système Unix utilise un mécanisme de mise en cache pour accélérer l’accès aux fichiers en
stockant temporairement les blocs en mémoire vive.
QUELQUES COMMANDES D'ACCÈS AUX
RÉPERTOIRES
Commande Description
ls Affiche la liste des fichiers contenus dans un répertoire
Options :
-a : liste aussi les fichiers cachés;
-l : donne des informations détaillées sur chaque fichier;
-i : donne le numéro de l'i-node du fichier.
mkdir crée un répertoire.
Commande : cp
➢ Cette commande permet la copie de fichiers.
Elle s’utilise sous quatre formes :
1) La copie d’un fichier source dans un fichier destination.
Exemple :
Dans le répertoire p2, copie du fichier text1.txt dans text2.txt
COMMANDE DE MANIPULATION DES
FICHIERS
2) La copie d’un fichier dans un répertoire.
Exemple :
COMMANDE DE MANIPULATION DES
FICHIERS
3) La copie d’un répertoire dans un autre (seuls les fichiers sont copiés :
on obtient un message d’erreur pour la copie des répertoires).
Exemple :
Copie le contenu du répertoire projet1 dans /home/user/Desktop/projet1
Dans un répertoire projet2
Commande :
$ cd /home/user/Desktop/projet1
$ cp * /home/user/Desktop/projet2
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : mv
Cette commande est équivalente à une copie, suivie d’une suppression.
Elle s’utilise sous deux formes :
1) Transfert de text1 dans text2 et suppression de text1; Si text2
existe, il est effacé.
Exemple :
user@pc :~$ mv text1 text2
COMMANDE DE MANIPULATION DES
FICHIERS
mv fichier(s) répertoire
Exemple :
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : rm
Supprime un (ou plusieurs) fichier(s) d’un répertoire.
Exemple :
Suppression du fichier text1.txt du répertoire projet1.
$ cd /home/user /Desktop/projet1
$ rm text1.txt
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : TOUCH
Cette commande permet (entre autres) de créer un fichier vide.
Exemple :
$ touch demo.txt
NIVEAU D’AUTORISATION
$ find . -mtime -5
Recherche les fichiers du répertoire courant qui ont été modifiés entre maintenant
et il y a 5 jours.
$ find . ! -user root
Affiche tous les fichiers n'appartenant pas à l'utilisateur root
LA RECHERCHE DE FICHIERS
Commande : locate Nom_du_fichier
➢ Permet de chercher un fichier donnée à travers son nom
des fichiers.
LA RECHERCHE DE FICHIERS
Commande : locate Nom_du_fichier
➢Recherche dans tous les répertoires du disque dur
LE STOCKAGE DES FICHIERS
LES LIENS ENTRE LES FICHIERS
Il existe deux types de liens pour gérer les fichiers :
➢ Les liens physiques : est un pointeur direct vers les données d’un
fichier sur le disque. En créant un lien physique, vous associez
plusieurs noms de fichiers à un même fichier (ou inode) dans un
même système de fichiers.
➢ Les liens symboliques : est un fichier spécial qui pointe vers un
autre fichier ou répertoire. Contrairement au lien physique, un lien
symbolique est une référence à un chemin, et non directement aux
données du fichier.
LES LIENS PHYSIQUES
Caractéristiques :
✓ Même inode : Un lien physique partage le même inode
(identifiant unique) que le fichier original, ce qui signifie
qu'ils sont indissociables au niveau des données.
✓ Suppression : Si vous supprimez un des fichiers avec un
lien physique, le fichier n'est pas réellement supprimé tant
qu'il existe au moins un autre lien physique vers les mêmes
données.
✓ Limites : Les liens physiques ne peuvent être créés que
dans le même système de fichiers. De plus, vous ne pouvez
pas faire de lien physique vers un répertoire.
LES LIENS SYMBOLIQUES
Caractéristiques :
✓ Chemin : Un lien symbolique contient le chemin vers le
fichier ou le répertoire cible.
✓ Inode différent : Le lien symbolique a un inode différent de
celui du fichier d’origine, car il s’agit d’un fichier distinct qui
contient l’adresse du fichier cible.
✓ Flexibilité : Vous pouvez créer des liens symboliques vers
des fichiers et des répertoires, et même entre différents
systèmes de fichiers.
✓ Fragilité : Si le fichier d'origine est supprimé, le lien
symbolique devient "cassé", car il pointe vers un chemin
inexistant.
La commande tr est utilisée ici pour traduire des caractères. Dans cet
exemple, tous les caractères de a à f (minuscules) dans le texte d'entrée sont
remplacés par leurs équivalents en majuscules (A à F).
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : tail [OPTIONS] [FICHIER]
➢Permet d'afficher les dernières lignes d'un fichier. Par défaut, elle montre
les 10 dernières lignes.
Exemple :
$tail +10 mon-fichier
Toutes les lignes du fichier de la 10eme jusqu'à la fin.
$tail -10 mon-fichier
Les 10 dernières lignes à partir de la fin.
$tail -c -10 mon-fichier
Les 10 derniers caractères du fichier.
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : head [OPTIONS] [FICHIER]
➢Afficher les premières lignes d'un fichier. Par défaut, elle affiche
les 10 premières lignes.
Exemple :
$head -n +10 mon-fichier
Toutes les lignes du fichier de la 10eme jusqu’au début.
$head -n -10 mon-fichier
Les 10 premières lignes à partir de la fin.
$head -n 10 -c mon-fichier
Les 10 premiers caractères du fichier.
COMMANDE DE MANIPULATION DES
FICHIERS
➢ Permet de comparer deux fichiers textes. Elle affiche les différences entre
ces fichiers, ce qui est particulièrement utile pour voir les modifications
apportées à un fichier ou pour vérifier les différences entre deux versions d'un
document.
Commande : paste
➢ Permet la fusion de lignes de fichiers. Elle permet de concaténer
les lignes de fichiers en les séparant par un délimiteur, généralement
une tabulation.
Options courantes
✓-s : Les lignes sont remplacées par des colonnes
✓-dx : Le caractère x définit le séparateur de champ
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : echo
Exemple :
bonjour
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : which
-m A f f ic h e l e t y pe d e l a m ac hi ne .
Exemple :
user@pc :~$ su
Login: root
COMMANDES DE BASE UNIX
Commande : sudo
$ sudo reboot
Exemple
user@pc :~$ Shutdown
LES FILTRES
DE RECHERCHE
LES EXPRESSIONS RÉGULIÈRES
➢ Définition : Formule qui représente une chaîne de caractères.
Composée de caractères et d'opérateurs.
➢ Utilisation : On recherche alors non pas un mot ou une simple
chaîne de caractères mais une suite de caractères qui
correspondent au critères énoncés par la formule.
➢ Certains opérateurs doivent être précédés d'un \ pour ne pas
entrer en conflit avec le shell, ainsi :
{ , } , ESPACE , ( , ) et | seront écrits \{ , \} , \ , \( , \) et \ | .
LES EXPRESSIONS RÉGULIÈRES
Rappel :
* : N’importe quelle séquence de caractères.
? : N’importe quel caractère.
[] : N’importe quel caractère choisi dans les caractères donnés entre crochets.
[^] : n’importe quel caractère sauf ceux dans les caractères donnés entre crochets.
[−] : n’importe quel caractère dans la plage de caractères donnés entre crochets.
Exemples :
$ ls *
$ ls ?ateau
$ ls *ateau
$ ls [gr]ate*
$ ls [^br]ateau
$ ls [a-c]*
LES EXPRESSIONS RÉGULIÈRES
➢ Les expressions régulières sont aussi des suites de caractères permettant de faire des
sélections.
➢ Les différentes expressions régulières sont :
LES EXPRESSIONS RÉGULIÈRES
Représentation :
Remarque :
✓ Le caractère ^ n'a la signification de non qu'entre crochets.
! Non logique
-a Liaison par et logique de deux critères
-o Liaison par ou logique de deux critères
COMMANDES DE BASE UNIX
Exemple avec find :
➢ Les fichiers n'appartenant pas à l'utilisateur u1:
find . ! -user u1 -print
➢ Recherche des fichiers qui ont pour nom a.out ou des fichiers se terminant
par .c:
find . \(-name a.out –o –name "*.c"\)
➢ Recherche des fichiers qui ont pour nom core et une taille supérieure à
1Mo.
find .\ (-name core –a –size +1M \)
COMMANDES DE BASE UNIX
Remarque :
Les opérateurs and et or n’ont par la même priorité, donc, il
faut positionner les parenthèses pour interpréter le ou logique
avant le et logique. Les parenthèses étant à leur tour des
caractères spéciaux, on doit les désactiver.
COMMANDES DE BASE UNIX
E X E RC I CES : FI ND
1) Afficher tous les fichiers qui commencent par ‘a’ majuscule ou minuscule.
2) Afficher tous les fichiers qui se composent de 3 caractères dont le dernier est ‘M’.
3) Afficher tous les noms de fichiers se terminant soit par a, b ou c.
4) Afficher tous les noms de fichiers répertoires commençant par une lettre
majuscule.
5) Afficher tous les noms de fichiers de l’utilisateur « webmaster1 » qui appartient
au groupe « webos ».
6) Afficher tous les fichiers normaux ayant pour taille plus de 150 Ko.
7) Afficher tous les fichiers dont les dernières modifications remontent à moins de
trois jours.
8) Afficher tous les fichiers répertoires ou les fichiers dont le nom se termine par le
caractère ‘a’.
9) Afficher tous les fichiers qui n’appartiennent pas a l’utilisateur « userxg1 ».
COMMANDES DE BASE UNIX
S OLU TION : FIND
1). $find / - name "[aA] *”
2). $find / - name "??M"
3). $find / - name "*[a b c] "
4). $find / - type d - name "[A-Z] *”
5). $find / - user "webmasters1" -a –group "webos"
6). $find / - type f -size "+150K"
7). $find / - type f -mtime -3
8). $find / (- type d -o type f) -name "*a"
9). $find .! –user "userxg1"
COMMANDES DE BASE UNIX
E X ER C IC E ( GR E P / C UT ) :
Exemple :
Suppression des fichiers si la commande cd projet1 a été correctement
exécutée.
$ cd projet1 && rm *
Exemple :
Si le répertoire projet1 n’existe pas, alors il sera créé par la commande
mkdir.
Commande
REDIRECTION DE LA SORTIE STANDARD
Exemple:
➢ On trie le fichier « fiche1 » et on écrit le résultat dans le fichier « fiche_trie » au
lieu d’afficher le résultat sur l’écran.
% sort fiche1 > fiche_trie
➢ On trie le fichier « fiche2 » et on écrit le résultat à la fin du fichier « fiche_trie ».
% sort fiche2 >> fiche_trie
Remarque:
On peut rediriger l’entrée et la sortie en même temps.
Exemple:
Trier le fichier « fiche » et écrire le résultat dans le fichier « fichier_trie »
% sort < fiche > fichier_trie
REDIRECTION DE LA SORTIE STANDARD
➢ La touche « << » passe la console en mode saisie au clavier, ligne
par ligne.
➢ Toutes ces lignes seront envoyées à la commande lorsque le mot-
clé de FIN aura été écrit.
REDIRECTION DE LA SORTIE STANDARD
Remarque :
La commande « cat » permet de faire la concaténation des fichiers en
redirigeant la sortie standard à l’aide des opérateurs de redirections « > »
ou « >> ».
Exemple:
Concaténer les fichiers « fiche1 » et « fiche2 » dans « fiche 3 »
% cat fiche1 fiche2 > fiche3
REDIRECTION DE LA SORTIE D’ERREURS STANDARD
(STDERR)
On exécute la commande « find » sans arguments. Les résultats de la recherche sont redirigés vers le fichier «res_find»
alors que les messages d’erreurs (par exemple on ne peut pas explorer un répertoire protégé en lecture) seront redirigés
vers le fichier «erreur_find ».
Remarques :
Les résultats et les erreurs peuvent être redirigés vers un même fichier grâce aux chaines «&>» ou « &>> »
Exemples:
% find . &>res
% find . &>>res
LES TUBES (PIPES)
Les pipes (tubes) permettent de rediriger la sortie d’un processus vers
l’entrée d’un autre. Les processus s’exécutent en parallèles.
Syntaxe :
cmdA | cmdB
➢« cmdA » et « cmdB » sont deux commandes.
➢Le symbole « | » est appelé « pipe ». Il permet de relier deux
commandes entre elles.
➢La sortie standard de la commande « cmdA » est utilisée comme
entrée standard de la commande « cmdB ».
LES TUBES (PIPES)
Exemple :
% ls -l > resultat.txt
ou
Les deux commandes peuvent être combinées pour élaborer une seule:
% ls -l | wc > cp.txt
LES TUBES (PIPES)
% ls -l | wc
16 124 921
➢ Compte le nombre de lignes, de mots et de caractères de la sortie de la
commande « ls-l » ( résultat: 16 lignes, 124 mots et 921 caractères).
Exemple :
➢ Compte le nombre de lignes, de mots et de caractères de la sortie de la
commande « ls -l | wc »
% ls -l | wc | wc
1 3 24
GESTION DES
UTILISATEURS
LES UTILISATEURS
➢ Linux est un système multi-utilisateurs :
➢ Un utilisateur est donc celui qui s’est logué en donnant un nom de login. Ce login
permet de définir l’utilisateur et tracer l’activité menée en son nom.
LES UTILISATEURS
➢ Il existe deux types d’utilisateurs :
❖ Les groupes sont utilisés pour contrôler les accès au sein du système.
➢ Le mode est spécifié par un nombre en octal (base 8), dont les chiffres
représentent (dans l'ordre de gauche à droite) :
✓ Les droits pour l'utilisateur propriétaire du fichier.
✓ Les droits pour le groupe propriétaire du fichier.
✓ Les droits pour tous les autres.
MODIFICATION DES DROITS D’ACCÈS AUX
FICHIERS : LE MODE SYMBOLIQUE
Syntaxe : umask x
Où x est un nombre exprimé sous forme octale qui déterminera les permissions.
MODIFICATION DES DROITS PAR DÉFAUTS
: UMASK
➢La commande umask :
✓ Permet de spécifier des droits par défaut lors de la création des fichiers.
✓ Utilise des masques sous forme numérique octale.
✓ Sans paramètre : indique le masque courant.
✓ Avec le masque en paramètre : modifie le masque courant.
Si vous ta pez um as k 24 4
Rajouter un sudo devant la commande si vous n'êtes pas déjà root, c'est à dire
tapez sudo adduser karim
COMMANDE PASSWD : CHANGER LE MOT
DE PASSE
Pour changer le mot de passe d'un utilisateur, utilisez la commande passwd
en spécifiant le nom du compte à modifier.
Exemple :
root@user:/home# passwd karim
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
Attention : Si vous utilisez passwd sans spécifier de nom d'utilisateur, c'est
le mot de passe de l'utilisateur courant (root dans ce cas) qui sera modifié.
COMMANDE DELUSER : SUPPRIMER UN
COMPTE
La commande deluser permet de supprimer un utilisateur déjà créé.
Exemple :
root@user:/home# deluser karim
Ne supprimez pas votre propre compte utilisateur (ex. : user), sinon il ne
restera que root, et Ubuntu interdit la connexion directe en tant que root.
Cela vous empêchera de vous connecter au prochain démarrage.
La commande seule ne supprime pas le répertoire personnel de l'utilisateur.
Pour supprimer également le dossier home et les fichiers personnels,
utilisez l'option --remove-home :
deluser --remove-home karim
AJOUT DE GROUPES AVEC ADDGROUP
addgroup : Cette commande sert à ajouter un nouveau groupe.
Exemples :
• Mettre karim dans le groupe amis :
usermod -g amis karim
• Remettre karim dans son groupe d'origine karim :
usermod -g karim karim
• Ajouter karim à plusieurs groupes simultanément (amis, math, physique)
usermod -G amis,math,physique karim
• Remarque : Séparez les groupes par des virgules sans espace entre les noms.
COMMANDE USERMOD : MODIFIER UN
UTILISATEUR
➢Attention : -G remplace tous les groupes auxquels l'utilisateur
appartient.
usermod -G amis karim
➢l’utilisateur karim sera retiré de tous ses groupes actuels et
ajouté uniquement au groupe amis.
➢Pour ajouter des groupes sans supprimer les groupes actuels,
utilisez -aG :
usermod -aG amis karim
Commande delgroup : Supprimer un groupe
delgroup amis
COMMANDE TAR : COMPRESSION ET
DÉCOMPRESSION
La commande tar (Tape ARchive) :
Un outil de compression et décompression pour la gestion des archives. Il permet de
regrouper plusieurs fichiers et répertoires en un seul fichier tar. Ce fichier peut
ensuite être compressé à l’aide d’autres outils tels que gzip ou zip.
Option Significat ion
-c Crée une nouvelle archive .
➢ Le symbole « & » est utilisé pour exécuter des commandes en arrière-plan, permettant au terminal de rester
disponible pour d'autres opérations. Cela est particulièrement utile pour les commandes ou scripts de longue
durée, car le shell ne reste pas bloqué en attendant leur achèvement.
➢ Lorsqu’une commande est suivie du symbole « & », le shell lance la commande en tâche de fond et revient
immédiatement au prompt pour permettre d'autres entrées.
nom_cmd &
✓ Permet de libérer le terminal pour d'autres commandes sans attendre la fin de la tâche.
✓ Utile pour des opérations lourdes, telles que les sauvegardes, téléchargements, ou scripts de traitement de
données.
COMPOSITION DES COMMANDES
Les séquences de commandes () et {}
➢ Les symboles () et {} permettent de regrouper plusieurs commandes pour créer une macro-
commande. Cette combinaison est pratique pour structurer et organiser des séquences de
commandes complexes.
❖ ( suite_cmds ) : Utilisation des parenthèses
✓ Les commandes placées entre parenthèses sont exécutées dans un sous-shell (processus
fils).
✓ Cela signifie que les modifications faites dans ce bloc (comme les changements de
variables ou de répertoires) n'affectent pas le shell principal.
❖ { suite_cmds ; } : Utilisation des accolades
✓ Les commandes entre accolades sont exécutées par le shell principal (pas de sous-shell).
✓ Les modifications apportées dans ce bloc sont donc visibles dans le shell principal.
COMPOSITION DES COMMANDES
Exemple : Utilisation d'une macro-commande avec () pour le sous-shell
Les commandes cd cours et pwd, placées entre parenthèses, sont exécutées dans un sous-shell.
Une fois le sous-shell terminé, le shell courant reste inchangé, d’où le retour au répertoire initial
/home/etudiant.
➢ Cela montre l’avantage des parenthèses pour exécuter des séquences de commandes sans impacter le
contexte du shell principal.
COMPOSITION DES COMMANDES
Exemple : Utilisation d'une macro-commande avec {} dans le shell principal
Les commandes entre accolades { cd cours; pwd; } sont exécutées dans le shell principal et non dans un sous-
shell.
Commande pwd en dehors des accolades : Confirme que le répertoire est toujours /home/etudiant/cours, car le
changement de répertoire fait partie du shell principal.
➢ Cet exemple montre que l’utilisation des accolades {} est idéale lorsque l’on souhaite que les changements
apportés par les commandes regroupées soient conservés dans le shell courant.
CONTRÔLE DES
PROCESSUS
CONTRÔLE DES PROCESSUS
Le shell permet de contrôler les processus qui s’exécutent. Un processus s’exécute soit en
foreground (avant plan), soit en background (arrière plan ou en tâche de fond).
➢ Foreground (Avant-plan) : Exécution par défaut.
✓ Lorsqu'une commande est lancée, elle s'exécute automatiquement en avant-plan.
✓ Bloque l'accès au terminal jusqu'à la fin de la commande. Empêche l'utilisateur de lancer
une autre commande dans le même terminal tant que l'exécution n'est pas terminée.
✓ Pendant l'exécution de cette commande :
• L’utilisateur ne peut pas saisir une autre commande dans ce même shell.
• Pour lancer une nouvelle commande en parallèle, l’ouverture d’un nouveau terminal est
nécessaire.
➢Exécution en arrière-plan
✓Pour permettre au shell de lancer plusieurs commandes en parallèle,
il est nécessaire d'exécuter une commande en arrière-plan.
Cela se fait en ajoutant le symbole & à la fin de la commande.
Exemple :
Pour rechercher tous les fichiers avec l'extension *.c à partir du répertoire racine / et
enregistrer les résultats dans le fichier resultat, la commande serait :
find / -name "*.c" > resultat &
Cette commande démarre une recherche en arrière-plan, permettant à l'utilisateur de
continuer à travailler sur le terminal pendant que la recherche s'effectue.
CONTRÔLE DES PROCESSUS
Exemple :
& : find doit être exécutée en arrière-plan. > : Redirige la sortie standard d'une commande vers un fichier.
1. Dans cette syntaxe, le shell essaie d'exécuter find en arrière-plan, mais la redirection (> resultat) est associée
à la commande qui précède le &, ce qui pourrait ne pas fonctionner comme prévu.
2. En effet, cette syntaxe tente d'exécuter find en arrière-plan tout en redirigeant la sortie dans resultat, mais la
redirection pourrait ne pas être appliquée à la commande en arrière-plan.
Le shell va traiter la redirection avant de lancer la commande en arrière-plan. La sortie standard de la commande
find ne sera pas correctement redirigée vers resultat. En fait, la redirection pourrait échouer, et resultat pourrait
rester vide.
Conclusion : les parenthèses permet de s'assurer que la redirection est correctement appliquée à la commande
find avant qu'elle ne soit exécutée en arrière-plan.
CONTRÔLE DES PROCESSUS
➢ La commande fg permet de relancer le processus en avant plan.
➢ On ne peut pas arrêter (interrompre) un processus en arrière plan avec « CTRL-C » .
➢ La commande jobs permet de lister les processus lancés en arrière plan, par le
même processus shell.
Exemple:
% jobs
[1]+ Running gedit &
✓ Veut dire que le processus « gedit » est lancé en arrière plan.
CONTRÔLE DES PROCESSUS
➢ Si l’exécution en arrière plan, s’est bien passée, une ligne « Done » apparait
indiquant que le processus est terminé.
Exemple:
[1] + Done find / -name "*.c" -type f > resultat
• Si l’exécution en arrière plan, ne s’est pas bien passée, une ligne « Exit »
apparait indiquant que le processus est terminé.
Exemple:
[1] + Exit find / -name "*.c" -type f > resultat
CONTRÔLE DES PROCESSUS
Précaution:
❖ Si le processus lancé en arrière plan fait des saisies interactives alors
le shell peut interpréter ces saisis comme de nouvelles commandes.
➢ éviter les saisies interactives dans les processus lancés en arrière
plan.
❖ Si le processus lancé en arrière plan fait des affichages sur écran
alors ces affichages peuvent se chevaucher avec les sorties standard
des nouvelles commandes lancées avec le shell.
➢ éviter les sorties standards dans les processus lancés en arrière plan.
CONTRÔLE DES PROCESSUS
Attention:
❖ Un processus ne peut exister que si son père existe.
Quand on quitte le processus père alors on quitte
automatiquement tous ses processus fils.
❖ Ne pas quitter le shell alors que ses processus fils
s’exécutent en arrière plan.
CONTRÔLE DES PROCESSUS
La commande « bg » permet de réactiver un processus
bloqué par « CTRL-Z ». L’exécution du processus réactivé
s’effectue en arrière plan.
bg %num_process
✓« num_process » désigne le numéro du processus lancé en
arrière plan.
✓pas d’espace entre % et « num_process ».
CONTRÔLE DES PROCESSUS
Exemple :
➢ On lance en avant-plan la commande « find ». Pendant l’exécution, on tape la commande «Ctrl-Z»
pour suspendre l’exécution du processus.
% find / > resultat
Lorsqu’on tape « Ctrl-Z », la commande « find » est suspendu , le message suivant est affiché.
[1] + Stopped find / > resultat
Exemple:
% cat ./Dossier/* > res1.txt 2> erreur1.txt &
% find / > res2.txt 2> erreur2.txt &
% wait
Exemple:
%ps
PID TTY TIME CMD
Quelques états:
❖ R (Running): prêt à être exécuté (il est sur la file d’attente des processus).
❖ S (Sleeping): bloqué en attente d’une action externe (par exemple le processus attend une
lecture sur la clavier).
❖ T : processus arrêté, par exemple par Ctrl-Z.
CONTRÔLE DES PROCESSUS : ARRÊT D'UN
PROCESSUS / SIGNAL
❖Pour arrêter un processus qui s’exécute en arrière plan, on
utilise la commande « kill » qui consiste à envoyer des signaux
au processus.
➢Le signal est un moyen de communication entre les processus.
kill [-num_signal] PID [PID ...]
❖Le principe de la commande consiste à envoyer un signal (une
requête) au processus spécifié dans la commande par son PID.
Ce dernier intercepte le message et réagit en fonction du
signal envoyé.
CONTRÔLE DES PROCESSUS : ARRÊT D'UN
PROCESSUS / SIGNAL
Remarque:
Seul le propriétaire du processus qui peut lancer la commande «kill » ou le super-user (utilisateur "root") .
Exemple :
% gedit test.c &
[1] 1234
% kill 1234
[1] + Terminated gedit test.c
CONTRÔLE DES PROCESSUS : ARRÊT D'UN
PROCESSUS / SIGNAL
➢ Le signale numéro 1 (SIGHUP): Ce signal est envoyé par le père à tous ses fils
lorsqu'il se termine.
➢ Le signal numéro 2 (SIGINT): ce signal permet l’interruption du processus
demandé (Ctrl+C).
➢ Le signal 9 (SIGKILL): ce signal permet de forcer l’arrêt du processus.
Exemple:
2. Mode Console
➢ vi : L’un des éditeurs de texte les plus anciens et omniprésents sous Unix. Il est léger
et performant.
➢ vim : Version améliorée de vi, offrant des fonctionnalités supplémentaires comme la
coloration syntaxique et les plugins.
➢ nano : Un éditeur plus simple, conçu pour être facile d’utilisation, avec des
commandes affichées en bas de l'écran.
ÉDITEURS DE TEXTE SOUS UNIX : GEDIT
gedit est un éditeur de texte graphique facile à utiliser, par défaut dans l’environnement
GNOME.
vim (vi amélioré) est une version améliorée avec plus de fonctionnalités.
❖ Passage en mode :
➢ Mode normal : navigation et commandes.
Pour ouvrir ou créer un fichier avec vi ou vim, entrez la commande suivante dans le terminal :
Lorsque vi est lancé, vous êtes par défaut en mode normal (mode de commande) où il n'est pas possible d'insérer du texte
directement. Pour commencer à insérer du texte, vous devez passer en mode insertion en appuyant sur l'une des touches
suivantes :
➢ i : Insère le texte à l'endroit actuel du curseur.
➢ I : Insère le texte au début de la ligne actuelle.
➢ a : Ajoute du texte après le curseur (après le caractère actuel).
➢ A : Ajoute du texte à la fin de la ligne actuelle.
➢ o : Ouvre une nouvelle ligne sous la ligne actuelle et passe en mode insertion.
➢ O : Ouvre une nouvelle ligne au-dessus de la ligne actuelle et passe en mode insertion.
Une fois dans le mode insertion, vous pouvez taper du texte comme dans un éditeur classique.
ÉDITEURS DE TEXTE SOUS UNIX : VI/VIM
Quitter le mode insertion :
Pour quitter le mode insertion et revenir en mode normal, appuyez sur la touche Échap
(Esc). Vous pourrez alors utiliser d'autres commandes ou naviguer dans le fichier.
Enregistrer et quitter le fichier :
Une fois les modifications terminées, revenez en mode normal (si vous êtes encore en
mode insertion) en appuyant sur Échap, puis utilisez les commandes suivantes :
➢ :w : Enregistre les modifications sans quitter vi.
➢ :wq ou :x : Enregistre les modifications et quitte vi.
➢ :q! : Quitte vi sans enregistrer les modifications.
INTRODUCTION AU BASH : LES DIFFÉRENTS
SHELLS ET LEUR INITIALISATION
Il existe plusieurs Shells UNIX :
➢C-Shell (csh ou tcsh)
➢Bourne Shell (sh ou bash)
➢Korn Shell (ksh), ....
L’interprétation des commandes simples est semblable pour tous. Par
contre, l’utilisation pour écrire des scripts diffère beaucoup (définition
des variables, structures de contrôle, etc).
INTRODUCTION AU BASH : LES DIFFÉRENTS
SHELLS ET LEUR INITIALISATION
L’initialisation du Shell se fait au démarrage du système : Les Shell exécutent
des fichiers de configuration, qui peuvent contenir des commandes
quelconques et sont généralement utilisés pour définir des variables
d’environnement et des alias :
➢ csh exécute le fichier ~/.cshrc (le "rc" signifie run command)
➢ tcsh exécute ~/.cshrc
➢ sh exécute ~/.profile
➢ bash exécute ~/.bash_profile ou à défaut ~/.profile
Ces fichiers d’initialisation sont "invisibles”.
INTRODUCTION AU BASH : VARIABLES
D’ENVIRONNEMENT
Elles sont instanciées lorsqu’un Shell est exécuté par le système. Ce sont des
variables dynamiques utilisées par les différents processus d’un système
d’exploitation.
➢ Elles donnent des informations sur le système, la machine et l’utilisateur.
➢ La commande env permet d’afficher à l’écran toutes les variables
d’environnement pour le Shell.
Pour définir ses propres variables d’environnement, on utilise la commande
export :
❖VARIABLE=VALEUR : donne une valeur à une variable.
❖export VARIABLE : définit VARIABLE comme une variable d’environnement.
❖echo $VARIABLE : affiche la valeur de la variable.
INTRODUCTION AU BASH : VARIABLES
D’ENVIRONNEMENT
LE SHELL : INTERPRÉTEUR DE
COMMANDES
Le shell est un environnement puissant pour l’automatisation et le développement de
scripts complexes sous Unix :
✓ Un Langage de Programmation Complet :
✓ Gestion des Variables :
Possibilité de définir et manipuler des variables pour stocker et traiter des données.
✓ Tests et utilisation des Boucles :
Structures conditionnelles (if, else) et boucles (for, while) pour automatiser les tâches.
✓ Opérations sur Variables :
Calculs, concaténations et manipulations avancées de chaînes de caractères.
✓ Définitions des Fonctions :
Capacité de définir des fonctions pour structurer le code et réutiliser des blocs
d’instructions.
LE SHELL : INTERPRÉTEUR DE
COMMANDES
➢La commande ps: Donne le nom du SHELL
Pour lancer l’exécution d’un fichier shell, on peut utiliser la commande : bash
✓ $ bash monscript
Il est plus simple de lancer l’exécution d’un programme shell en tapant directement son nom, comme on le
ferait pour une commande unix ou une commande interne.
Pour que cela soit réalisable, deux conditions doivent être remplies :
l’utilisateur doit posséder les permissions r (lecture) et x (exécution) sur le fichier shell :
✓ $ chmod u+x monscript
✓ Pour l'exécuter : $ ./monscript
Pour éviter le ./ le répertoire dans lequel se trouve le fichier shell doit être présent dans la liste des chemins
contenue dans PATH. :
✓ $ PATH=$PATH:.
✓ $ monscript
STRUCTURE ET EXÉCUTION D'UN SCRIPT
❖ Une ligne de commentaire commence toujours par le caractère « # ». Un commentaire peut
être placé à la fin d'une ligne comportant déjà des commandes.
# La ligne suivante effectue un ls
ls # La ligne en question
❖ La première ligne à une importance particulière car elle permet de préciser quel shell va
exécuter le script.
#!/bin/ sh
#!/bin/ksh
❖ Dans le premier cas c'est un script Bourne, dans l'autre un script Korn
❖ Dans notre cas on va utiliser le Bourne Again Shell
#!/bin/bash
STRUCTURE ET EXÉCUTION D'UN SCRIPT
Exercice :
1. A l’aide d’un éditeur de texte, créer un fichier premier contenant les lignes suivantes :
#!/bin/bash
# premier
echo "La date du jour est: "
Date
La notation #! en première ligne d'un fichier interprété précise au shell courant quel interpréteur doit être
utilisé pour exécuter le programme (dans cet exemple, il s’agit de /bin/bash).
Ex : $ bash premier
la date du jour est : jeudi 27 février 2014, 17:34:25 (UTC+0100)
$
STRUCTURE ET EXÉCUTION D'UN SCRIPT
Exercice :
Écrire un programme shell monscript1 qui affiche le nom de connexion
de l'utilisateur et le chemin absolu de son répertoire courant de la
manière suivante :
Ex : $ monscript1
mon nom de connexion est : stagiaire
mon repertoire courant est : /home/stagiaire
$
LES TYPES DE PARAMETRES
❖Le shell distingue trois types de paramètres :
B- les variables prédéfinies du shell (ex : PS1, PATH, REPLY, IFS, HOME)
C- les variables prédéfinies de commandes unix (ex : TERM).
Ex : $ x=coucou y=bonjour
Ex : $ echo x est $x
x est coucou
TYPES D’AFFECTATION DES VARIABLES
le nom d’un paramètre « x » et la valeur de ce paramètre « $x » ne se
désignent pas de la même manière.
Ex :
$ x=$x$y => x : contenant, $x : contenu
$ echo $x
coucoubonjour
$
TYPES D’AFFECTATION DES VARIABLES
Lorsque l’on souhaite effectuer une concaténation, il est possible d’utiliser
l’opérateur += de bash
Ex :
$ x=coucou y=bonjour
$ x+=$y
$ echo $x
coucoubonjour
$
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER
Ex :
$ read
bonjour tout le monde
$
$ echo $REPLY
bonjour tout le monde
$
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER
Ex : $ read a b c
un bon jour coucou
$
$ echo $a
un
$ echo $c
jour coucou
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER
R2 : s’il y a Plus de variables que de mots dans la ligne lue, chaque
variable reçoit un mot et après épuisement de ces de derniers, les
variables excédentaires sont vides.
Ex : $ read a b
un
$
$ echo $a
un
$
$ echo $b
=> valeur null
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER
Ecrire un programme shell deuxfois qui affiche le message "Entrez un mot : ", lit le
mot saisi par l'utilisateur puis affiche ce mot deux fois sur la même ligne.
Ex : $ deuxfois
Entrez un mot : toto
toto toto
$
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER
Solution : deuxfois
#!/bin/bash
read -p "Entrez le mot:" a echo $a $a
VARIABLE EN « LECTURE SEULE » OU
CONSTANTE
declare –r nom=valeur [ nom=valeur … ]
La commande declare -r permet de déclarer une variable comme étant en lecture
seule, ce qui signifie que sa valeur ne peut pas être modifiée après sa définition. C'est
utile pour définir des constantes dans un script shell.
Ex : $ declare -r mess=bonjour
❖ Une tentative de modification de la valeur d’une constante provoque une erreur.
Ex : $ mess=salut
bash: mess : variable en lecture seule
$
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER
❖ VARIABLE = valeur
❖ export VARIABLE
En Bash, les variables définies dans un shell sont locales à ce shell et ne sont pas visibles par les
sous-processus ou les shells enfants, sauf si elles sont exportées.
ma_variable = toto
export ma_variable
# Ouvrir un nouveau shell (sous-shell)
bash
echo $ma_variable # toto
DECLARE ET EXPORT
Pour rendre une variable disponible pour une exportation en
dehors de l'environnement du script lui-même on utilise:
declare -x var3
declare -x var3=373
La variable var3 peut être appelée par un autre script dans le
même shell mais reste inconnue pour les autres shell (nouvelle
console).
LES VARIABLES
➢ Les variables Bash ne sont pas typées : À l'inverse de nombreux langages de
programmation.
➢ les variables bash sont des chaînes de caractères mais, suivant le
contexte, Bash autorise des opérations entières et des comparaisons sur
ces variables, le facteur décisif étant la seule présence de chiffres dans la
variable. declare –i permet de déclarer une variable de type entier par
exemple
➢ La commande intégrée declare permet de modifier les propriétés des
variables. Ceci est une forme très faible du typage disponible dans
certains langages de programmation. La commande declare est
spécifique à la version 2 ou ultérieure de Bash.
LES VARIABLES D’ENVIRONNEMENT
➢ Les variables accessibles à un interpréteur (ou plus généralement à un
processus) peuvent se décomposer en deux classes :
❖ les variables locales (comme les variables de l’exemple précédent) :
elles disparaissent lorsque l’interpréteur (ou le processus) se termine.
Ex : $ a=coucou
$b=bonjour => définition de la variable locale b
$ export b => la variable b devient une variable d d’environnement
$ export c=bonsoir => définition de la variable d’environnement c
$ bash => création d’un shell fils
$ echo $a
$ => la variable a est inconnue
$ echo $b
Bonjour
$ echo $c
bonsoir => les variables b et c sont connues du shell fils
$ exit => fin du shell fils
LES VARIABLES D’ENVIRONNEMENT
➢ La transmission des variables d’environnement est unidirectionnelle :
du processus père vers le(s) processus fils.
➢ Si un processus fils modifie la valeur d’une variable d’environnement, seule sa copie locale en sera affectée.
Ex : $ export a=coucou
$ bash
$ echo $a
coucou
$ a=bonsoir => modification de la variable d’environnement a dans le shell fils
$ echo $a
Bonsoir
$ exit
$ echo $a
coucou => la valeur n’a pas été modifiée dans le shell père
LES VARIABLES D’ENVIRONNEMENT
Visualisation des variables disponibles :
La commande printenv : affiche les valeurs des variables de
l’environnement du processus en cours.
Supprimer une variable :
La commande unset variable : supprime la variable de la
liste des variables disponibles.
VARIABLES DU SHELL - PERSONNALISATION
DE L’ENVIRONNEMENT
❖ Utilisée sans argument, set a un comportement différent : elle affiche, entre autres, la liste des
noms et valeurs des variables définies. (Ex : $ set | more)
❖ Si la valeur du premier argument de set commence par un caractère - ou +, une erreur se produit.
En effet, les options de cette commande interne commencent par un de ces deux caractères.
❖ Pour éviter que ce type d’erreur ne se produise, on utilise la syntaxe : set --ar g …
PARAMÈTRES SPÉCIAUX
➢ Un paramètre spécial est référencé par un caractère spécial.
L’affectation d’une valeur à un paramètre spécial est effectuée
par le shell (implicitement).
❖ Ceci signifie que $* est équivalent à "$1c$2c...'', dans laquelle c est le premier
caractère de la valeur de la variable IFS.
❖ Si I FS est nulle ou inexistante, les paramètres sont séparés par des espaces.
➢ $0 : le nom du script
PARAMÈTRES SPÉCIAUX
Ex : $ nbmots
$
SOLUTIONS
Solution 1
#!/bin/bash
read -p "Entrez une suite de mots:" a set $a
echo $#
Solution 2
#!/bin/bash
echo "Entrez une suite de mots" read a
set $a
echo $#
COMMANDE INTERNE SHIFT
➢ La commande interne shift décale la numérotation des paramètres de position ayant une valeur.
Syntaxe : shift [n]
$ set a b c d e => 1 2 3 4 5
$ echo $1 $2 $#
ab5
$ shift 2
=> a b c d e les mots a et b sont devenus inaccessibles
=> 1 2 3
$ echo $1 $3
ce
$ echo $#
3
$
Remarques :
➢ shift ne modifie pas la valeur du paramètre de position 0 qui possède une signification particulière.
COMMANDE INTERNE SET : CAS PARTICULIER
➢ Lorsque la commande interne set est utilisée dans un script shell, la syntaxe $1 a deux significations distinctes :
Exemple :
#!/bin/bash
Exécution :
$1 est bonjour
$1 est hello
PARAMÈTRES SPÉCIAUX * ET @
Les paramètres spéciaux @ et * contiennent tous les deux la liste des valeurs des
paramètres de position initialisés.
$ set "$*" => est équivalent à : set “bonjour deux coucou salut"
$
$ echo $#
1
$ echo $1
$
PARAMÈTRES SPÉCIAUX * ET @
➢ "$@" produit autant de chaînes que de paramètres de positions initialisés.
➢ "$*" traite l’ensemble des paramètres de position initialisés comme une unique chaîne de
caractères.
Inversement,
Ex : $ set bonjour "deux coucou" salut => trois paramètres de position initialisés
$
$ set "$@” => est équivalent à : set “bonjour" “deux coucou" “salut"
$
$ echo $#
3
$ echo $2
deux coucou => l’intégrité de la chaîne a été préservée
$
SUBSTITUTION DE COMMANDES
Syntaxe : $( cmd )
➢ Une commande cmd entourée par une paire de parenthèses ( ) précédées d'un caractère $ est
exécutée par le shell puis la chaîne $( cmd ) est remplacée par les résultats de la commande
cmd écrits sur la sortie standard, c’est à dire l’écran.
➢ Ces résultats peuvent alors être affectés à une variable ou bien servir à initialiser des
paramètres de position.
Ex : $ pwd
/home/ubuntu => résultat écrit par pwd sur sa sortie standard
$ repert=$(pwd) => la chaîne /home/ubuntu remplace la chaîne $(pwd)
$
$ echo mon repertoire est $repert mon # repertoire est /home/ubuntu
METTRE UNE COMMANDEDANS UNE VAR
➢ rep=`pwd`
➢ echo $rep
➢ var=$(echo `pwd`)
➢ Var=$(echo `ls –l|wc -l`)
➢ Var =$(` echo $mavariable | grep [a-z] | wc -l` )
EXERCICE
En utilisant la substitution de commande, écrire un fichier shell mach
affichant :
"Ma machine courante est nomdelamachine"
Ex : $ mach
$
SOLUTION
#!/bin/bash
mamachine=$(hostname)
Echo ’’Ma machine courante est $mamachine’’
SUBSITITUTION DE COMMANDES
Pour l’utiliser avec la commande set il faut utiliser le double « - » Set - - $(cmd)
$ set $( ls -l .bashrc)
bash: set: -w : option non valable
set : utilisation : set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg...]
$ ls -l .bashrc
-rw-r--r-- 1 sanchis sanchis 3486 mai 18 2013 .bashrc
$
Ex : $ ls -l .bashrc
-rw-r--r-- 1 ubuntu ubuntu 3486 mai 18 2013 .bashrc
$
$ taille .bashrc #!/bin/bash
3486 var=$(ls -l $1)
set -- $var
echo $5
GROUPEMENT DE COMMANDES
Le shell fournit deux mécanismes pour grouper l’exécution d’un ensemble de commandes sans pour cela affecter un nom à ce
groupement :
❖ l’insertion de la suite de commandes entre une paire d’accolades { suite_cmds ; }
Ex : $ pwd
/home/sanchis => répertoire initial
$
$ { cd /bin ; pwd ; } => changement du répertoire courant
/bin
$
$ pwd
/bin => répertoire final (le changement a été préservé !)
$
❖ l’insertion de cette suite de commandes entre une paire de parenthèses ( suite_cmds ; )
Ex : $ ( pwd ; date ; echo FIN ) > fin
$
$ cat fin
/home/sanchis
lundi 31 mars 2014, 10:55:31 (UTC+0200)
FIN
GROUPEMENT DE COMMANDES
Exercice : A l'aide de la commande date, écrire un programme shell jour qui affiche le jour courant du
mois.
Ex : $ date
lundi 24 mars 2014, 09:08:02 (UTC+0100)
$
$ jour
24
$ Set - - $(date) ; Echo $2
Exercice : a) Ecrire un programme shell heure1 qui affiche l'heure sous la forme : heures:minutes:secondes
Ex : $ heure1
09:11:40
Set - - $(date) ; Echo $4
b) Ecrire un programme shell heure qui n’affiche que les heures et minutes. On pourra utiliser la variable
prédéfinie IFS du shell
Ex : $ heure
09:11
GROUPEMENT DE COMMANDES
Exercice :
Ecrire un programme shell uid qui affiche l'uid de l'utilisateur. On utilisera la
commande unix id, la commande interne set et la variable prédéfinie IFS.
$id
Ex : $ set un deux trois quatre cinq six sept huit neuf dix onze douze
$ echo $11
Un1
$
$ echo ${11} => pour obtenir la valeur du onzième paramètre de position onze
PARAMÉTRES NON DÉFINIS
Trois cas peuvent se présenter lorsque le shell doit évaluer un paramètre :
✓ Le paramètre n’est pas défini,
✓ Le paramètre est défini mais ne possède aucune valeur (valeur vide),
✓ Le paramètre possède une valeur non vide.
Lorsque l’option nounset de la commande interne set est positionnée à
l’état on (commande set -o nounset), bash affiche un message d’erreur
quand il doit évaluer un paramètre non défini.
PARAMÉTRES NON DÉFINIS
Ex : $ set -o nounset => option nounset à l’état on
$ echo $e => variable utilisateur e non définie
bash: e : variable sans liaison => message d’erreur !
$ set -- => paramètres de position sont réinitialisés
$ echo $1
bash: $1 : variable sans liaison
$ d= => d : variable définie mais vide
$ echo $d
=> > valeur null, pas d d’erreur
$
PARAMÉTRES NON DÉFINIS
${paramètre:‐chaîne}
PARAMÉTRES NON DÉFINIS
Ex : $ set -o nounset
$ ut1=root => ut1 définie et non vide
$ ut2= => ut2 définie et vide
$ echo $ut1
root
$ echo $ut2
$ echo $1
bash: $1 : variable sans liaison
=> paramètre de position 1 non défini
$
PARAMÉTRES NON DÉFINIS
Ex : $ echo ${ut1:-Remplace}
root => ut1 étant définie non vide, sa valeur est utilisée
$ echo ${ut2:-Remplace}
=> ut2 est définie et vide, la valeur de remplacement est utilisé
Remplace
$
$ echo ${1:-Remplace}
Remplace
=> le premier paramètre de position est non défini, la valeur de
remplacement est utilisée
$
PARAMÉTRES NON DÉFINIS
Cette association ne dure que le temps d’exécution de la
commande.
Ex : $ echo $1
bash: $1 : variable sans liaison
=> le paramètre est redevenu indéfini
$
PARAMÉTRES NON DÉFINIS
La commande « set +o nounset » positionne l’option nounset à l’état off :
le shell traite les paramètres non définis comme des paramètres vides.
Ex : $ nblignes fich_noms
3
$
$ nblignes=$( wc -l < fic_noms )
$ echo $nblignes
3 => nombre de lignes
$
REDIRECTIONS ET SCRIPTS
Redirections séparées des entrées / sorties standard
Les entrées / sorties peuvent être redirigées indépendamment les unes des autres.
Ex : $ a=1.2 b=-5.3
$
$ bc <<< "$a + $b"
-4.1
$
REDIRECTIONS ET SCRIPTS : TUBES ET
CHAÎNES JOINTES
Le shell crée un processus différent pour chaque commande d’un tube cmd1 | cmd2.
Cela provoque l’effet suivant : si cmd2 modifie la valeur d’une variable, cette
modification disparaitra avec la fin du processus qui exécute cette commande.
Ex : $ a=bonjour
$ echo $a | read rep # (a)
$ echo $rep
=>la variable rep ne contient pas la chaîne bonjour ; elle n’est pas initialisée
$
Pour éviter ça, on place les deux commandes à l’intérieur d’une paire de parenthèses
Ex : $ echo $a | ( read rep ; echo $rep )
bonjour => l’affectation à rep a bien été effectuée
$ echo $rep
=> > variable rep non initialisée
$
REDIRECTIONS ET SCRIPTS : TUBES ET
CHAÎNES JOINTES
Cela provient du fait qu’il y a deux variables rep différentes :
Une qui est créée et utilisée par le processus qui exécute la commande
read rep et une qui est créée et utilisée par le processus qui exécute la
commande echo $rep. L’utilisation d’une chaîne jointe permet de résoudre
de manière élégante ce problème de transmission de données entre
processus.
Ex : $ read rep <<< "$a"
$
$ echo $rep
bonjour
$
REDIRECTIONS ET SCRIPTS : SUBSTITUTION
DE PROCESSUS
La substitution de processus généralise la notion de tube. La principale forme de
substitution de processus est la suivante : cmd <(suite_cmds)
Le shell crée un fichier temporaire, connecte la sortie de suite_cmds à ce fichier
temporaire puis lance l’exécution de cette suite de commandes.
Ex : $ ls -l
total 8
-rw-rw-r-- 1 sanchis sanchis 140 mars 31 10:29 err
-rw-rw-r-- 1 sanchis sanchis 0 mars 31 10:26 f
-rw-r--r-- 1 sanchis sanchis 156 mars 31 10:30 trace
$ wc -l <(ls -l)
4 /dev/fd/63 => la commande ls –l affiche 4 lignes
$
Dans l’exemple ci-dessus, la sortie de la commande ls –l a été enregistrée dans un fichier
temporaire /dev/fd/63. Puis, la commande wc –l /dev/fd/63 a été exécutée.
INTERPRÉTATION DE COMMANDE TEST
La commande Test :
test condition & & alo rs_instruction1|| sinon_instruction2
ou
[ condition ] & & alors_instruction1 | | sinon_instruction2
est utilisée dans de nombreux cas par les structures de contrôle du shell. Cette
commande renvoie 0 si la condition est vérifiée et une Valeur différente de 0
sinon.
Dans la deuxième syntaxe, il faut faire attention à mettre des espaces entre les
crochets et la condition.
❖ commande1 & & commande2 : exécute commande1, si le code de retour est
O K alors on exécute commande2,
❖ commande1 | | commande2 : exécute commande1, si le code de retour est
mauvais alors on exécute commande2.
TEST DE CONDITIONS
La commande test permet d'effectuer des tests de conditions. Le résultat est récupérable par la variable :
$? (code retour)
Si ce résultat est 0 alors la condition est réalisée.
Tests sur chaîne :
❖ test -z "variable" : zero, retour OK si la variable est vide (ex test -z "$a")
❖ test -n "variable" : non zero, retour OK si la variable n'est pas vide (texte quelconque)
❖ test "variable" = chaîne : OK si les deux chaînes sont identiques
❖ test "variable" != chaîne : OK si les deux chaînes sont différentes
Exemple :
$ a=
$ test ‐z "$a" ; echo $?
0
$test ‐n "$a" ; echo $?
1
$ a=omar
$ test "$a" = omar ; echo $?
0
TEST DE CONDITIONS
Tests sur valeurs numériques
Les chaînes à comparer sont converties en valeurs numériques. La syntaxe est : test valeur1 option valeur2
et les options sont les suivantes :
Option Role
-eq Equal : égal
-ne Not Equal : différent
-lt Less than : inférieur
-gt Greater than : supérieur
-lt Less or equal : inférieur ou égal
-ge Greater or equal : supérieur ou égal
Exemple : $ a=10
$ b=20
$ test "$a" ‐ne "$b" ; echo $?
0
$ test "$a" ‐ge "$b" ; echo $?
1
$ test "$a" ‐lt "$b" && echo "$a est inferieur a $b »
10 est inferieur a 20
TEST DE CONDITIONS
Tests sur les fichiers
La syntaxe est : test option nom_fichier et les options sont les suivantes :
Option Rôle
-f Fichier normal
-d Un répertoire
-c Fichier en mode caractère
-b Fichier en mode bloc
-r Autorisation en lecture (pour le propriétaire)
-w Autorisation en écriture (pour le propriétaire)
-x Autorisation en exécution (pour le propriétaire)
-s Fichier non vide (au moins un caractère)
-e Le fichier existe
-L Le fichier est un lien symbolique
TEST DE CONDITIONS
Tests sur les fichiers :
Exemple :
$ ls -l
-rw-r--r-- 1 oracle system 1392 Aug 14 15:55 dump.log
lrwxrwxrwx 1 oracle system 4 Aug 14 15:21 lien_fic1 > fic1
lrwxrwxrwx 1 oracle system 4 Aug 14 15:21 lien_fic2 -> fic2
-rw-r--r-- 1 oracle system 234 Aug 16 12:20 liste1
-rw-r--r-- 1 oracle system 234 Aug 13 10:06 liste2
-rwxr--r-- 1 oracle system 288 Aug 19 09:05 param.sh
-rwxr--r-- 1 oracle system 430 Aug 19 09:09 param2.sh
-rwxr--r-- 1 oracle system 292 Aug 19 10:57 param3.sh
drwxr-xr-x 2 oracle system 8192 Aug 19 12:09 rep1
$ test -f lien_fic1 ; echo $?
1
$ test -x dump.log ; echo $?
1
$ test -d rep1 ; echo $?
0
TEST DE CONDITIONS
Tests combinés par critères ET OU NON
Exemple :
➢ Le mot test peut être remplacé par les crochets ouverts et fermés « [...] ».
Exemple :
$ [ "$a" ‐lt "$b" ] && echo "$a est inferieur a $b" 10 est
inferieur a 20
TEST DE CONDITIONS
Tests étendus :
Une nouvelle commande permet des tests étendus et généralement plus performants, par l'utilisation
des doubles-crochets « [[...]] ».
$ test –f fich ⇔ [ -f fich ] ⇔ [[ -f fich ]]
Il existe quelques différences entre la commande test (ou []) et la nouvelle :
Exemple :
$ [[ -d "rep1" && -r "rep1" ]] && echo "rep1 : repertoire avec droits write"
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
➢ Expressions arithmétiques habituelles évaluées à l'aide de
❖ expr (révolue),
❖ let (moderne et fait pour plusieurs expressions)
❖ ((…)) pour une seule expression (Comme let)
Ex : $ a=100
$ expr $a + 1
101 => Affiche la valeur de a incrémenté de 1
$ ((y = 2 * x +3))
Affecte à y la valeur de l'expression 2x+3
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Opérateurs identiques à ceux du langage C :
Arithmétiques :
❖ () pour fixer l'ordre d'évaluation, ! Négation, * multiplication, / quotient, %
modulo, + addition, - soustraction.
❖ a++, a-- post-incrémentation, post-décrémentation.
❖ ++a, --a pré-incrémentation, pré-décrémentation.
Booléens :
❖ <=, >=, <, >, == (égalité), != (différent), && (et logique), || (ou logique)
Affectation :
❖ = (affectation simple)
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Commande interne : (( Cette commande interne est utilisée pour effectuer des opérations arithmétiques :
Syntaxe : (( expr_arith ))
➢ expr_arith est évaluée ;
si cette évaluation donne une valeur différente de 0, alors le code de retour de la commande interne (( est égal à 0
sinon le code de retour est égal à 1.
Exemple :
$ (( 1‐5 )) => la valeur de l'expression arithmétique est égale à ‐4 donc le code de retour de (( est égal à 0
$ echo $?
0
$ (( 5‐5 )) => la valeur de l'expression arithmétique est 0, donc le code de retour de (( est égal à 1
$echo $?
1
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Commande interne ((
Il est inutile d'utiliser le caractère de substitution $ devant le nom d'une variable car il n'y a pas d'ambiguïté
dans l'interprétation ; par contre, lorsqu'une expression contient des paramètres de position, le caractère $
doit être utilisé.
$ declare –i a= 2 $ date
Exemple : $ (( b = a + 7 )) jeudi 21 décembre 2006, 19:41:42 (UTC+0100)
$ echo $b $
9 $ set $(date)
$
$ (( b = $2 + 1 )) => incrémentation du jour courant
$
$ echo $b
22
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Valeur d'une expression arithmétique :
La commande interne (( expr_arith )) n'affiche pas sur la sortie standard la valeur de l'expression arithmétique
expr_arith.
Pour obtenir la valeur de l'expression arithmétique, on utilise la syntaxe : $(( expr_arith ))
Exemple :
$echo $(( 7 * 2 ))
14
16
1
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Commande expr
La commande expr permet d'effectuer des calculs sur des valeurs numériques, des comparaisons, et de la
recherche dans des chaînes de texte.
Exemple :
$ expr 7 + 3
10
$ expr 7 \* 3
21
$ a a=`expr 13 – 10`
$ echo $a
3
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Commande let
En bash, les var. sont toutes des chaînes de caractères ⇒Incapable de manipuler des nombres ⇒ pas d’opérations!!
On peut faire des calculs en utilisant l'instruction "let". Syntaxe : let "expr_arith"
Exemple :
$ let "b=12+3"
$ echo $b
15
Les opérations :
➢ L’addition : +
➢ La soustraction : −
➢ La multiplication : ∗
➢ La division : /
➢ La puissance : ∗∗
➢ Le modulo : %
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Variables de type entier
✓ Pour définir et initialiser une ou plusieurs variables de type entier, on utilise la syntaxe
suivante : (même syntaxe avec la commande typeset )
declare -i nom[=expr_arith] nom[=expr_arith] ...
✓ L'avantage est qu'il devient possible d'effectuer des calculs et des comparaisons sans
passer par expr. La commande let ou « ((...)) » permet des calcules sur variables.
✓ Pour que la valeur d’une variable entière ne soit pas accidentellement modifiée après
qu’elle ait été initialisée, il suffit d’ajouter l’attribut r.
✓ pour connaître toutes les variables entières définies, il suffit d’utiliser la commande
declare -i
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Variables de type entier
Exemples :
$ declare ‐i x=35 => définition et initialisation de la variable entière x
$ declare ‐i v w => définition des variables entières v et w
$ v=12 => initialisation de v par affectation
$ read w
34 => initialisation de w par lecture
$declare ‐ir a=‐6 => seule la consultation est autorisée !
$ typeset ‐i resultat
$ resultat= 6*7
$ echo $resultat
42
$ resultat=resultat*3
126
$ resultat=Erreur
Erreur: bad number
DÉLAI D’ATTENTE
Commande sleep
La commande sleep permet d'attendre le nombre de secondes indiqués. Le script est
interrompu durant ce temps. Le nombre de secondes et un entier compris entre 0 et 4
milliards (136 ans).
Exemple :
$ sleep 10 ; date
STRUCTURES DE CONTRÔLE
Structure de contrôle conditionnelle : if ... then ... Else
Else
fi
On peut aussi préciser le elif, en fait un else if. Si la dernière condition n'est pas réalisée on en teste une nouvelle.
❖ Le fonctionnement est le suivant : commandes_condition est exécutée ; si son code de retour est égal à 0, alors
la branche then est exécutée sinon c'est la branche elif ou la branche else qui est exécutée, si elle existe.
STRUCTURES DE CONTRÔLE
if condition ; then
commande
fi
if condition ; then
commande1;
else
commande2;
fi
If condition1 then
Commandes
elif condition2 then
Commandes
elif …
else
fi commandes
STRUCTURES DE CONTRÔLE
❖ Créer un script rm1 pour supprimer un fichier d onnée en paramètre Si la suppression
se passe bien, afficher u n message « Fichier a été supprimé » Sinon un message
« fichier n’a pas été supprimé ».
❖ Créer un script affic qui affiche la type de fichier donné en paramètre si fichier ordinaire
afficher le contenu, si répertoire lister le contenu, sinon afficher message « type non traité ».
programme affic
programme rm1 if [[ ‐f $1 ]] then
#!/bin/bash echo $1 : fichier ordinaire
if rm $1 2>/dev/null cat $1
then echo ‘’$1 a été supprimé’’ elif [[ ‐d $1 ]]
else echo ‘’$1 n’a pas été supprimé’’ Then
fi echo $1 : repertoire
ls $1
Else
echo $1 : type non traité
fi
STRUCTURES DE CONTRÔLE
Choix multiples avec case
La commande case ... esac permet de vérifier le contenu d'une variable ou d'un résultat selon
plusieurs cas possibles.
Syntaxe : case valeur in
Expr1) commandes ;;
Expr2) commandes ;;
...
esac
Expr peut être : Un simple texte Ou une composition de caractères spéciaux.
❖ Chaque bloc de commandes lié à une expression doit se terminer par ;;
❖ Dès qu'une expression (Expr) est vérifiée, le bloc de commandes correspondant est exécuté.
❖ L'étoile (*) en dernière position est utilisée comme une action par défaut si aucun critère n'est
satisfait.
STRUCTURES DE CONTRÔLE
Choix multiples case :
Exemples :
STRUCTURES DE CONTRÔLE
Choix multiples case :
Expr peut être construit à l’aide des caractères et expressions génériques de bash.
Exemple :
read –p ″Entrez votre réponse : ″ rep
case $rep in
*) echo Indefini
esac
STRUCTURES DE CONTRÔLE
Choix multiples case :
Exemple :
STRUCTURES DE CONTRÔLE
Choix multiples case :
Exemple :
Ecrire un script qui test si le caractère saisi est un nombre, majuscule, minuscule,
alphabet, ou autre.
#!/bin/bash
# Tester des suites de caractères.
echo "Appuyez sur une touche, puis faites ENTER."
read Touche
case "$Touche" in
[[:lower:]] ) echo "Lettre minuscule";;
[[:upper:]] ) echo "Lettre majuscule";;
[0-9] ) echo "Nombre";;
* ) echo "Ponctuation, espace blanc ou autre";;
esac
STRUCTURES DE CONTRÔLE
Boucle for
STRUCTURES DE CONTRÔLE
Boucle for
$ for_liste
toto
tata
STRUCTURES DE CONTRÔLE
Boucle for
Deuxième forme :
Si liste_mots contient des substitutions, elles sont préalablement traitées par bash.
for i in 1 3 4 6 7 9 10;
do echo $i;
done
STRUCTURES DE CONTRÔLE
Structure for pour les expressions arithmétiques:
Bash a introduit une nouvelle structure for adaptée aux traitements des expressions arithmétiques,
itération issue du langage C. Elle fonctionne comme cette dernière.
Syntaxe :
for (( expr_arith1 ; expr_arith2 ; expr_arith3 ))
do
suite_cmd
done
do instructions
done
Chaque option du menu est affichée précédée par son numéro d’ordre. La sélection de l'utilisateur est stockée dans la variable
d'environnement REPLY, tandis que la valeur sélectionnée est assignée à la variable var.
$PS1 :
Définit le prompt principal du shell. Par défaut, sa valeur est $ (ou # pour l'utilisateur root). Vous pouvez personnaliser $PS1 pour
afficher des informations comme l'heure, le nom de l'utilisateur ou le répertoire courant.
$PS2 :
Définit le prompt secondaire, affiché lorsque l'utilisateur continue une saisie (exemple : lorsque vous utilisez une commande sur
plusieurs lignes). Par défaut, sa valeur est >.
$PS3 :
Définit le prompt pour la commande select. Par défaut, aucune valeur spécifique n'est définie, mais vous pouvez
personnaliser $PS3 pour afficher un message contextuel dans les menus créés par select.
STRUCTURES DE CONTRÔLE
Select :
Écrire un script qui affiche « Bonjour Madame » ou « Bonjour Monsieur » selon si l'utilisateur indique être
une femme ou un homme.
Affichage :
1) Homme
2) femme
Femme ou Homme ?
STRUCTURES DE CONTRÔLE
#!/bin/bash
❖ La commande: break [n] provoque, quand à elle la sortie de la boucle en cours et passe
à l’instruction qui suit la boucle.
➢ Dans les deux cas, l’entier n permet d’indiquer que l’action se porte sur une
boucle externe.
❖ Par exemple, break 2 sortira de la boucle qui englobe la boucle dans laquelle cette
instruction est écrite.
COMMANDE EXEC
La commande exec exécute la commande à la place du processus (shell) courant :
Exemple:
exec vi myfile
exec 1>/tmp/out
COMMANDE EXPR
expr arguments...
➢ Cette commande évalue les arguments comme une expression et le
résultat est envoyé sur la sortie standard.
➢ Ce n’est pas une commande interne au shell
➢ « expr », comme toutes les commandes UNIX , doit avoir ses arguments
séparés par des espaces.
➢ La première utilisation de « expr » concerne les opérations
arithmétiques simples.
❖ Les opérateurs +, -, * et / correspondent respectivement à l'addition,
à la soustraction, à la multiplication et à la division.
❖ La seconde utilisation de la commande « expr » concerne la
comparaison et la gestion des chaînes de caractères grâce à
l'opérateur « : ».
EXPR ET TRAITEMENTS DES CHAINES DE
CARACTÈRES
➢expr exp1 \| exp2 : renvoie exp1 si exp1 est non nul, sinon
renvoie exp2.
➢expr exp1 \& exp2 : renvoie exp2 si exp1 est non nul,
sinon renvoie 0.
➢expr exp1 : exp2 comparaison des deux arguments
(renvoie le nombre de caractères en commun)
➢expr length exp retourne le nombre de caractères de exp
➢expr substr exp n1 n2 retourne une sous chaîne de exp
commençant a la place n1 et de n2 caractères
➢expr index exp car retourne la position du caractère car
dans la chaîne exp
EXPR ET TRAITEMENTS DES CHAINES DE
CARACTÈRES
E XEM PL ES :
X=3; Y=5
Z=`expr $X + 4 `
echo $Z #affiche 7
Z=`expr \( $Z + $X \) \* $Y`
echo $Z #affiche 50
X=abcdef
Z=`expr $X : '.*’ `
echo $Z #affiche 6
Z=`expr \( $X : '.*' \) + $Y`; echo $Z #affiche 11
CALCULS, TRAITEMENTS DES
CHAÎNES DE CARACTÈRES
Exemple:
programme qui incrémente la valeur d’une variable de 1 et l’affiche tant que
c’est inférieur à 10:
done
LES FONCTIONS
Le shell bash propose plusieurs syntaxes pour définir une fonction:
function nom_fct
{
suite_de_commandes
}
nom_fct () {
commande...
}
function nom_fct
{ suite_de_commandes ;}
Pour appeler une fonction, il suffit de mentionner son nom.
DÉFINITION DE FONCTION EN MODE LIGNE
Comme pour les autres commandes composées de bash, une
fonction peut être définie directement à partir d’un shell
interactif.
$ function f0
{
> echo Bonjour tout le monde !
>}
$ f0 => appel de la fonction f0
Bonjour tout le monde !
$
L’EXÉCUTION D’UNE FONCTION
L'exécution d'une fonction s'effectue dans l'environnement
courant, autorisant ainsi le partage de variables.
En mode commande :
$ c=Coucou
$
$ function f1
{
echo $c => utilisation dans la fonction d’une variable externe c
}
$
$ f1
Coucou
$
OÙ DÉFINIR UNE FONCTION
Il n’est pas obligatoire de définir toutes les fonctions en début de programme. Il
est uniquement nécessaire que la définition d’une fonction soit faite avant son
appel effectif, c'est-à-dire avant son exécution :
function f1
{ ... ;}
suite_commandes1
function f2
{ ... ;}
suite_commandes2
Dans le code ci-dessus, suite_commandes1 ne peut exécuter la fonction f2
(contrairement à suite_commandes2).
Pour utiliser les fonctions dans tout le script il suffit de les déclarer au début.
DECLARE -F
Les noms de toutes les fonctions définies peuvent être listés à l'aide
de la commande :
declare –F
#exemple de réponse
declare -f f0
declare -f f1
Les noms et corps de toutes les fonctions définies sont affichés
à l’aide de la commande :
declare –f
Pour afficher le nom et corps d’une ou plusieurs fonctions :
declare -f nomfct ...
declare -f f0
SUPPRESSION D’UNE FONCTION
Une fonction est rendue indéfinie par la commande interne :
unset -f nomfct ...
$ declare -F declare -f f0 declare -f f1
$ unset -f f1
$ declare –F
declare -f f0 => la fonction f1 n’existe plus !
LES ARGUMENTS PASSÉS AU SCRIPT
❖ Les arguments d’une fonction sont référencés dans son corps de la
même manière que les arguments d’un programme shell le sont :
$1 référence le premier argument, $2 le deuxième, etc., $# le
nombre d’arguments passés lors de l’appel de la fonction.
❖ Le paramètre spécial $0 n’est pas modifié : il contient le nom du
programme shell.
❖ Ecrire un script qui affiche $0, $1 et $# avant la définition de la
fonction, dans la fonction et après.
LES ARGUMENTS PASSÉS AU SCRIPT
script.sh : #!/bin/bash
echo "Avant f : \$0 : $0"
echo " Avant f : \$# : $#"
echo " Avant f : \$1 : $1"
function farg
{
echo " --- dans f : \$0 : $0"
echo " --- dans f : \$# : $#"
echo " --- dans f : \$1 : $1" ; }
# Appel de la fonction
farg
echo " Aprés f : \$0 : $0"
echo " Aprés f : \$# : $#"
echo " Aprés f : \$1 : $1"
LES VARIABLES GLOBALES
Par défaut, une variable définie à l’intérieur d’une fonction est globale ; cela signifie qu’elle est
directement modifiable par les autres fonctions du programme shell.
VAL=
function min() {
if [ -n "$1" ] && [ -n "$2" ]; then
if [ "$1" -lt "$2" ]; then
VAL=$1
else
VAL=$2
fi
fi
}
min 1132 1300
echo "$VAL est la plus petite valeur"
EXPORTER UNE FONCTION
➢ Pour qu’une fonction puisse être exécutée par un programme
shell différent de celui où elle a été définie, il est nécessaire
d’exporter cette fonction.
➢ On utilise la commande interne export: export -f nomfct
#!/bin/bash
function bonj
{
echo bonj : Bonjour $1
}
export -f bonj
VISIBILITÉ D’UNE FONCTION
➢ Après son export, la fonction bonj sera connue dans les sous-
shells créés lors de l’exécution de ProgShell.
#!/bin/bash
source def_f # ou plus court : . def_f
# Permissions suff de def_f : r--r--r--
x=2
f # appel de la fonction f contenue dans def_f
Définition def dans le script def_f.sh
#!/bin/bash
function f()
{echo $((x+2));}
APERÇU SUR LES TABLEAUX
Instanciation
tab[1]=1
Appel de l'ensemble du tableau:
${tab[*]}
Appel d'un élément :
${tab[i]}
Declare -a tab # l'index de tab est un nombre
Exemple :
#!/bin/bash
nom[0]='Bonjour’
nom[1]='Monsieur’
echo ${nom[0]} #affiche 'Bonjour’
echo ${nom[*]} #affiche 'Bonjour Monsieur'
APERÇU SUR LES TABLEAUX
Exemple :
tab=(red green blue yellow magenta)
len=${#tab[*]}
echo “Le tableau a $len éléments. Ce sont:”
i=0
while [ $i -lt $len ]
do
echo "$i: ${tab[$i]}"
let i++
done
TABLEAU ASSOCIATIF
Version bash 4
Declare -A A RR AY
Initialisation
ARRAY["C"]="26"
ARRAY["B"]=10 ;
ARRAY["FHH"]='c'
TABLEAU ASSOCIATIF
A c c è s a u x éléments :
L e s différents modes d’accès aux éléments des tableaux sont ensuite les mêmes que pour un tabl eau indexé :
echo ${ARRAY["A"]}
echo ${ARRAY["FHH"]}
Pa r c o u rs d u tab lea u :
"${ARRAY[${elem}]}
done