0% ont trouvé ce document utile (0 vote)
146 vues134 pages

Cours - Shell

Ce document décrit l'historique et les caractéristiques d'UNIX ainsi que les commandes de base du shell comme ls, cd, mkdir. Il explique également la structure du système de fichiers d'UNIX et les chemins d'accès absolus et relatifs.

Transféré par

Asmaa Antari
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
146 vues134 pages

Cours - Shell

Ce document décrit l'historique et les caractéristiques d'UNIX ainsi que les commandes de base du shell comme ls, cd, mkdir. Il explique également la structure du système de fichiers d'UNIX et les chemins d'accès absolus et relatifs.

Transféré par

Asmaa Antari
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Pr.

Mohammed Alaoui Talibi

SIC – GE, INSA EM, Fés

1
 Historique d’UNIX

 Caractéristiques d’UNIX

 SHELL : sh
 Commandes de base
 Scripts

 Expressions régulières

 Commande sed
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
2
Première version 1973 D. Ritchie
d’UNIX 90 % en Langage C

Laboratoire BELL
Version 6

Version 7
AT & T et BELL Université de Berkeley

Système III BSD 3

Système V BSD 4.1

BSD 4.3

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés 3


 Vers la fin des années 80, deux versions largement
utilisées et sensiblement incompatibles d’UNIX
 System V release 3
 BSD4.3 (Berkeley Software Distribution)

 Chaque constructeur ajoutait ses propres


améliorations
 Cette incompatibilité a freiné le succès
commercial du système
  la standardisation d’UNIX devient une nécessité

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


4
 Standardisation

 POSIX (Portable Open System Interface


eXchange) membre de IEEE
 Définition d’un ensemble de procédures que doit
fournir tout système compatible à la norme
 Intersection des deux familles

 Ressemble fortement à leur ancêtre version 7

 Norme IEEE P1003.1 devenue norme ISO 9945

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


5
Première version 1973 D. Ritchie
d’UNIX 90 % en Langage C

Laboratoire BELL
Version 6

Version 7
AT & T et BELL Université de Berkeley

Système III BSD 3

Système V BSD 4.1

Linux BSD 4.3

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


6
 Multi-tâches Multi-utilisateurs

 Sécurité ( login, mot de passe )


 Seuls les utilisateurs ayant un login et un passwd peuvent se
connecter au système

 Meilleure protection
 droits d’accès au niveau des fichiers

 Portabilité
 Disponible pour plusieurs plateformes (Station de travail, PC,
Macintosh)

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


7
 Modularité
 Noyau
 Utilitaires

 Système de fichier
 Arborescent
 Réparti
 Réorganisation souple

 Traitement uniforme des périphériques


 Un périphérique est traité comme un fichier

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


8
 Outils de communication intégrés
 Talk, write, mail …

 Système de commandes
 Très riche
 Puissant

 Plusieurs interpréteurs de commandes


 Exemples : sh, ksh, csh, …
 Inter chargeables sans redémarrer la machine

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


9
 Interface graphique conviviale :

 Système de fenêtrage proche de Windows


 Exemples : KDE, GNOME, …

 Stable
 Plante rarement
 Il y a toujours moyen de débloquer le processus qui bloque
le système.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


10
Outils de
communication

Shell

Noyau

Editeurs
de texte

Gestion des processus


Gestion de la mémoire
Gestion des E/S
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
11
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
12
 Bourne shell : sh

 Korne shell : ksh

 Cshell : csh

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


13
 Commandes

 Taper une commande à l'invite du shell

 Script

 Un fichier de commande

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


14
 Organisation logique

 Structure arborescente

 Fichier : contient les données

 Répertoire : noeud contenant des fichiers ou d'autres


sous répertoires

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


15
/
Répertoires
home
bin

dupont dubois
alibaba
[Link]
images cours documents

[Link] [Link] [Link] [Link]


Unix
fichiers
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
16
 Chemin d’accès :

 l’ensemble des nœuds qui mènent vers un fichier ou


un répertoire séparés par ‘/’.

. : répertoire courant

.. : répertoire père


Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
17
 Chemin absolu
 commence à la racine : '/'
 Exemple
/home/dubois/documents/[Link]

 Chemin relatif
 Commence à partir du répertoire courant
 Exemple :

../documents/[Link]

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


18
/

bin home

dubois dupont
alibaba saladin

Répertoire images cours documents


courant

[Link] [Link] [Link] [Link]


Unix
Chemin absolu
Chemin relatif
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
19
 Identificateur (nom)

 Suite de caractères (jusqu’à 255 caractères)


 Sensible à la casse
 Utiliser le caractère d’échappement ‘\’ pour les
caractères spéciaux
 Exemple précéder le caractère espace par \
 Nom\ fichier

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


20
 Caractères "joker"
 Permettent d’appliquer une commande à un
ensemble de fichiers dont le nom vérifie certaines
contraintes (ex : le nom commence par la lettre
‘p’, l’extension est ‘.doc’, …)

 * : remplace n’importe quelle suite de caractère (y


compris la chaîne vide)

 ? : remplace un et un seul caractère

 [-] : définit un intervalle

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


21
 ls
 Affiche le contenu du répertoire courant ou de celui
passé en paramètre
 Options
 -l : affiche les informations complètes des fichiers et sous
répertoires
 -a : affiche les fichiers cachés
 -R : affichage récursif
 -i : affiche le descripteur des fichiers (i-numéro)
 -d : n'affiche pas le contenu des répertoires

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


22
 pwd
 Affiche le chemin du répertoire courant

 cd chemin

 Se déplace vers le répertoire identifié par 'chemin'


 Exemples :

$ cd /home/dubois/doc
$ cd ../dubois/doc

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


23
 mkdir (md) nouveau_rep
 Crée un nouveau_rep dans

 Le répertoire courant
 nouveau_rep est le nom du répertoire
 Exemple :
$ mkdir stages

 Dans le chemin indiqué par la première partie de


nouveau_rep
 Exemple :
$ md /home/dupont/stages
$ mkdir ../dupont/stages
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
24
 rmdir repertoire
 Supprime un repertoire vide

 Exemple
 $ rmdir /home/dupont/temp

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


25
 rm fichier
 Supprime un fichier ou un répertoire non vide

 Options
 -r : la commande détruit de manière récursive toute la
sous arborescence du répertoire
 -i : demande la confirmation avant de supprimer le fichier

 Exemple
 $ rm -r doc
 $ rm -i /home/dupont/[Link]

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


26
 cat fichier [fichier,...]
 Concatène et affiche sur la sortie standard le(s)
fichier(s) en paramètre OU
 Affiche sur la sortie standard, le contenu des
fichiers, spécifiés en argument de la commande,
l’un après l’autre.
 Exemple
 $ cat fichier1.
 $ cat fichier1 fichier2.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


27
 more fichier
 Affiche le contenu du fichier page par page
 Utilisée pour les fichiers longs (contenant plusieurs
pages) :
 Q : quitte la commande
 Return : saute de ligne
 Espace : saute de page

 Exemple
 $ more lettre

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


28
 head [-c nchar -n nline] fichier
 Affiche le début du fichier
 Par défaut les dix premières lignes
 -c nchar : affiche les nchar premiers caractères du fichier
 -n nline : affiche les nline premières lignes du fichier

 Exemple
 $ head lettre
 $head -c 280 lettre
 $ head -n 5 lettre

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


29
 tail [-/+c nchar -/+n nline] fichier
 Affiche la fin du fichier
 Par défaut les dix dernières lignes
 -/+c nchar : affiche les derniers caractères du fichier
+ à partir du nchar ème caractère jusqu’ à la fin du fichier
- Les nchar derniers caractères à partir de la fin
 -/+n nline : affiche les dernières lignes du fichier
+ à partir de la nline ème jusqu’à la fin du fichier
- Les nline dernières lignes à partir de la fin
 Exemple
 $ tail lettre
 $tail -n 6 lettre affiche les 6 dernières lignes
 $ tail +n 6 lettre affiche de la ligne 6 jusqu’à la fin
du fichier

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


30
 wc [-lwc] fichier
 Compte le nombre de
-l : lignes
-w : mots
-c : caractères

du fichier
 Par défaut les trois
 Exemple
 $ wc lettre

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


31
 cp source destination
 Copie le fichier source dans le fichier ou
répertoire destination
 mv source destination
 Déplace le fichier source dans le répertoire
destination
 Exemple
 $ cp lettre correspondances/lettre1
 $ cp lettre correspondances
 $ mv lettre correspondances
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
32
 ln source lien

 Crée un lien physique sur le fichier source

 Pas possible pour les répertoires ou fichiers d'autres SGF

 -s : le lien est symbolique

 Exemple

 $ ln lettre : lien_lettre

 $ ln -s lettre : lien_symbolique
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
33
 Commande tar :
 Archive un ensemble de fichiers dans un seul
fichier (d’extension ‘.tar’)
 Facilite l’organisation (moins d’encombrement dans le
SGF)
 Efficace pour envoyer, par mail, plusieurs fichiers en
attachement

 Restitue l’ensemble des fichiers à partir du


fichier archive (l’opération inverse)

 Possibilité de compression et de décompression


de l’archive en appelant la commande "gzip"
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
34
 Commande tar
 Syntaxe
 $ tar [options] [fichiers]

Option Description
-x Extraire le contenu d'une archive.
-c Créer une nouvelle archive.
-t Afficher seulement la liste du contenu de l'archive, sans l'extraire.
-f Fichier Indiquer le nom du fichier archive.
-v Mode verbeux, affiche le détail des opérations.
-z Compresser ou décompresser en faisant appel à l'utilitaire gzip.
-j Compresser ou décompresser avec l'utilitaire bzip2.
-p Préserver les permissions des fichiers.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


35
 Commande find
 Cherche un fichier dans une arborescence donnée
 Les critères de recherche peuvent porter sur :
 Le nom
 La dernière date d’accès
 La dernière date de modification
 Le type (fichier, répertoire ou lien)
 …

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


36
 Commande find
 Syntaxe
 $ find [chemin] [options]

Option Description
-atime +n (-n) Trouve les fichiers accédés il y a plus/moins de n jours
-mtime +n (-n) Trouve les fichiers modifiés il y a plus/moins de n jours
-name "pierre" Trouve les fichiers dont le nom est pierre
-maxdepth n Définit le niveau n maximum de sous répertoire à explorer
Indique le type de fichier à rechercher. type peut être:
-d : pour les répertoires
- f : pour les fichiers
-type < d | f | l >
- l : pour les liens symboliques

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


37
 Commande grep :
 Cherche les lignes d’un fichier qui contiennent un
motif (un mot ou une chaîne de caractères)
 Affiche ces lignes sur la sortie standard
 Syntaxe
 $ grep motif fichier
 Exemple
 $ grep "ali" /home/prof/[Link]

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


38
 who
 Affiche les informations sur les utilisateurs
connectés
 who ami
 Affiche les informations de l'utilisateur courant
 whoami
 Affiche le login de l'utilisateur courant
 id
 Affiche l'UID et le GID de l'utilisateur courant
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
39
 Commande useradd (voir aussi adduser)
 Limité au root.
 Ajouter un nouvel utilisateur au système.
 Possibilité de spécifier quelques paramètres du nouveau compte
 Informations concernant l’utilisateur (nom, fonction, …)
 Durée de validité du compte
 Groupe
 Shell
 …

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


40
 Commande useradd :
Option Description
-c <commentaire> Informations concernant l'utilisateur (nom, poste).
-d <répertoire> Chemin du répertoire personnel de l'utilisateur.
-e <date> Date d'expiration du compte. Le format est AAAA-MM-JJ.

C'est le nombre de jours suivant l'expiration du mot de passe


après lequel le compte est désactivé. La valeur 0 permet de
-f <nombre de jours> désactiver le compte dès que le mot de passe expire. La valeur
-1 permet de désactiver cette caractéristique. La valeur par
défaut est -1 .

Le nom du groupe ou le numéro du groupe de connexion initial


-g <groupe principal> de l'utilisateur. Le nom ou le numéro du groupe doivent exister.
Le numéro de groupe par défaut est 1.
Les autres groupes auxquels appartient l'utilisateur (séparés par des
-G <groupes supplémentaires> virgules).

41
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
 Commande useradd
Option Description
Le répertoire de l'utilisateur sera créé (par défaut, cela n'est pas
-m toujours le cas).

À utiliser si et seulement si l'option -m est présente. Permet de copier


-k <répertoire> les fichiers et répertoires contenus dans le répertoire modèle
</etc/skel si non spécifié) dans le répertoire de l'utilisateur.

Vous pouvez saisir le mot de passe en option. Il doit être chiffré (pour
récupérer la version cryptée d'un mot de passe il faut utiliser la
-p <mot de passe chiffré>
bibliothèque crypt). Si le mot de passe n'est pas défini, le
comportement par défaut est de désactiver le compte.

-s <chemin> Shell lancé à la connexion de l'utilisateur.


-u L'identifiant unique de l'utilisateur.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


42
 Commande useradd :

 Syntaxe
 $ useradd [options] nouvel_utilisateur
 Exemple
 Création du nouveau compte alibaba (login) appartenant au
groupe Etudiants avec bash comme shell par défaut

 $ useradd –c " Ali BABA" –g Etudiants –s /bin/bash alibaba

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


43
 Commande userdel
 Supprimer un utilisateur du système

 Syntaxe
 $ userdel [-r] login

 Rajouter l’option –r permet de supprimer le répertoire personnel de


l’utilisateur en question

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


44
 Commande passwd
 Changer le mot de passe
 Un utilisateur normal peut changer uniquement son mot de passe
 L’administrateur peut changer le mot de passe de tous les
utilisateurs

 Verrouiller/déverrouiller un compte
 Supprimer un mot de passe

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


45
 Commande passwd
 Syntaxe
Option Description
Indique que seul le mot de passe doit être mis à jour, sans toucher aux propriétés
-k
d’expiration
Permet de verrouiller le compte spécifié en préfixant le mot de passe crypté par le
-1
caractère « ! ». Seul l'utilisateur root peut utiliser cette option.
- - stdin Le mot de passe doit être lu à partir de l'entrée standard qui peut alors être un pipe.
Déverrouille le mot de passe du compte. Seul l'utilisateur root peut utiliser cette
-u
option.
Supprime le mot de passe d'un compte. Le champ réservé au mot de passe crypté
sera supprimé dans le fichier de configuration. Seul l'utilisateur root peut utiliser
-d
cette option.

Affiche des informations sur le statut du mot de passe pour un compte donné.
-S
Seul l'utilisateur root peut utiliser cette option.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés 46


 Commande passwd :

 Syntaxe
 $ passwd [options] [login]
 Si le paramètre login n’est pas spécifié alors, le changement
s’applique pour le compte courant. Le système demande de
saisir l’ancien et le nouveau mot de passe.

 Exemple
 $ passwd
 $ passwd –d alibaba

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


47
 Commande groupadd (voir aussi addgroup)
 Crée un nouveau groupe
 Syntaxe
 $ groupadd [options] nouveau_groupe

Option Description
-g Permet de spécifier le GID du nouveau groupe
-f Stoppe la commande si le groupe ou le GID existe déjà

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


48
 Commande groupdel
 Supprime un groupe
 Aucun utilisateur ne doit avoir ce groupe comme principal.

 Syntaxe
 $ groupdel groupe

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


49
 ps :

 Affiche les informations des processus actifs

 Options
 -l : affiche les informations complètes des processus
 -x : affiche tous les processus actifs (d'autres
utilisateurs)
 -u : affiche les processus d'un utilisateur donné

 Exemple
 $ ps -l
 $ ps -u dupont

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


50
 kill -signal ident_processus

 Envoi un signal à un processus

 Exemple
 $ kill -9 33456

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


51
 Déterminent les types d’opérations qu’un utilisateur
ou une classe d’utilisateurs peuvent effectuées.

 Chaque fichier peut avoir ses propres droits d’accès

 Système de protection très puissant

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


52
 Types d’utilisateurs
 Propriétaire (owner)

 Groupe du propriétaire (ou du fichier)

 Les autres utilisateurs (others)

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


53
 Types d’autorisation des fichiers
 r : droit d’accès en lecture

 w : droit de modification

 x : droit d’exécution (limité aux fichiers exécutables)

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


54
 Types d’autorisation des répertoires
 r : droit d’afficher le contenu

 w : droit d’ajout et de suppression

 x : droit d’exploration

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


55
 Exemple

- rwx rw- --x monexe


- rwx rw- r-- document
Droits des
autres
Droits du groupe

Droits du
propriétaire - : fichier ordinaire
d : répertoire
c, b : fichier périphérique
Type de fichier l : lien sur un fichier
s : socket
p : tube 56
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
 chmod mode fichier
 Mode = utilisateurs/permission
 Exemple
 $chmod u+x fich1
 $chmod g-w fich1
 $chmod +r fich1

 Mode = chiffres
 Exemple
 $ chmod 754 fich1

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


57
 chown nouveau_util fichier
 Change le propriaitaire du fichier
 Exemple
$ chown dubois fich1

 chgrp nouveau_grp fichier


 Change le groupe du fichier
 Exemple
$ chgrp telecom fich1

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


58
 > : la sortie standard est redirigée vers un fichier
(écrasement de son contenu s'il existe déjà)

 < : les entrées de la commande proviennent d'un


fichier

 >> : la sortie standard est insérée à la fin d'un fichier

 2> : la sortie d'erreur est redirigée vers un fichier

 2>> : la sortie d'erreur est insérée à la fin d'un fichier


Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
59
 Permet la communication des entrées/sorties entre les
processus.

 Schéma

 cmd1|cmd2| cmd3|….

 Le résultat de cmd1 sera l’entrée de cmd2, le résultat de cmd2


sera l’entrée de cmd3 et ainsi de suite.

 Exemple

 $ ls –l | grep "prog"

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


60
Introduction aux Scripts Shell

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


61
 Imaginez un mini-langage de programmation intégré à
Linux.

 Ce n'est pas un langage aussi complet que peuvent


l'être le C, le C++ ou le Java par exemple,

 mais il permet d'automatiser la plupart de vos tâches :


sauvegarde des données, surveillance de la charge de
votre machine, etc.

 On aurait très bien pu faire tout cela en créant un


programme en C par exemple.

 Pourquoi alors ???


Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
62
 Legros avantage du langage shell est d’être
totalement intégré à Linux :

- il n'y a rien à installer,

- rien à compiler.

- Et surtout : vous avez très peu de


nouvelles choses à apprendre.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


63
 En effet, toutes les commandes que l'on utilise
dans les scripts shell sont des commandes du
système que vous connaissez déjà : ls, cut, grep,
sort…

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


64
 Toutd’abord on doit distinguer entre les deux
environnements très différents disponibles sous-
linux :

 l'environnement console ;

 l'environnement graphique.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


65
 Laplupart du temps, sur sa machine, on a
tendance à utiliser l'environnement graphique, qui
est plus intuitif.

 Cependant, la console est aussi un allié très puissant


qui permet d'effectuer des actions habituellement
difficiles à réaliser dans un environnement
graphique.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


66
Voici les noms de quelques-uns des principaux shells qui
existent :
 sh : Bourne Shell. L'ancêtre de tous les shells.
 bash : Bourne Again Shell. Une amélioration du Bourne
Shell, disponible par défaut sous Linux et Mac OS X.
 ksh : Korn Shell. Un shell puissant assez présent sur les
Unix, compatible avec bash.
 csh : C Shell. Un shell utilisant une syntaxe proche du
langage C.
 tcsh : Tenex C Shell. Amélioration du C Shell.
 zsh : Z Shell. Shell assez récent reprenant les
meilleures idées de bash, ksh et tcsh.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
67
 Tout d'abord que l'ancêtre de tous les shells est le sh (Bourne
Shell).

 C'est le plus vieux et il est installé sur tous les OS basés sur Unix.

 Il est néanmoins pauvre en fonctionnalités par rapport aux autres


shells.

 Le bash (Bourne Again Shell) : est le shell par défaut de la plupart


des distributions Linux mais aussi celui du terminal de Mac OS X.

 Il y a fort à parier que c'est celui que vous utilisez en ce moment


sous Linux.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


68
 Voici dans l’hiérarchie comment ont évolué les
shells.
 Chacun hérite la plupart des fonctionnalités de
son ancêtre :

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


69
 sh reste toujours plus répandu que bash.

 Enfait, vous pouvez être sûrs que tous les OS basés


sur Unix possèdent sh,

 mais ils n'ont pas tous forcément bash.

 CertainsOS basés sur Unix, notamment les OS


propriétaires (AIX et Solaris…), utilisent d'autres
types de shells ;
le ksh y est par exemple très répandu.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
70
 La première chose à faire dans un script shell est
d'indiquer… quel shell est utilisé :

 #!/bin/bash
 Le #! est appelé le sha-bang

 /bin/bash peut être remplacé par /bin/sh si vous


souhaitez coder pour sh, /bin/ksh pour ksh, etc.

 Bien que non indispensable, cette ligne permet de


s'assurer que le script est bien exécuté avec le bon
shell.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
71
 En l'absence de cette ligne, c'est le shell de
l'utilisateur qui sera chargé.

 Celapose un problème : si votre script est écrit


pour bash et que la personne qui l'exécute utilise
ksh, il y a de fortes chances pour que le script ne
fonctionne pas correctement !

 La
ligne du sha-bang permet donc de « charger » le
bon shell avant l'exécution du script.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


72
 Après le sha-bang, nous pouvons commencer à coder.

 Le principe est très simple : il vous suffit d'écrire les


commandes que vous souhaitez exécuter.

 Ce sont les mêmes que celles que vous tapiez dans


l'invite de commandes ! :

ls : pour lister les fichiers du répertoire.


cd : pour changer de répertoire.
mkdir : pour créer un répertoire.
grep : pour rechercher un mot.
sort : pour trier des mots.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
73
 Onva donc créer un script bash qui va juste se
contenter d'afficher le contenu du dossier courant :

#!/bin/bash
ls

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


74
Les commentaires :

 Ce sont des lignes qui ne seront pas exécutées mais


qui permettent d'expliquer ce que fait votre script.

 Tous les commentaires commencent par un #.

Par exemple :

#!/bin/bash
# Affichage de la liste des fichiers
ls
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
75
Exécuter le script bash :

 Notre
mission maintenant est de parvenir à
exécuter le petit script.

 Commencez par enregistrer votre fichier et fermez


votre éditeur.

 Vous retrouvez alors l'invite de commandes.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


76
Donner les droits d'exécution au script :

 Si vous faites un ls -l pour voir votre fichier qui


vient d'être créé, vous obtenez par exemple ceci :

$ ls -l
total 4 -rw-r--r-- 1 mateo21 mateo21 17 2018-11-
13 14:33 test_1.sh

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


77
 Pour exécuter un script, il faut que le fichier ait le
droit « exécutable ».

 Le plus simple pour donner ce droit est d'écrire :

$ chmod +x test_1.sh

Vous pouvez vérifier que le droit a bien été donné :

$ ls -l
total 4
-rwxr-xr-x 1 mateo21 mateo21 17 2018-11-13 14:33
test_1.sh Pr. M. Alaoui Talibi
SIC-GE, INSA EM, Fés
78
 Comment font les autres programmes pour pouvoir
être exécutés depuis n'importe quel répertoire
sans « ./ » devant ?

Ils sont placés dans un des répertoires du PATH.

Le PATH est une variable système qui indique où sont


les programmes exécutables sur votre ordinateur.

Si vous tapez echo $PATH vous aurez la liste de ces


répertoires « spéciaux ».
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
79
 Il vous suffit donc de déplacer ou copier votre script
dans un de ces répertoires, comme :

/bin,
/usr/bin
/usr/local/bin

ou encore un autre répertoire du PATH.

- Notez qu'il faut être root pour pouvoir faire cela.

- Une fois que c'est fait, vous pourrez alors taper


simplement [Link] pour exécuter votre programme.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
80
Comme dans tous les langages de programmation, on
trouve en bash ce que l'on appelle des variables.

Les variables en bash sont assez particulières. Il faut


être très rigoureux lorsqu'on les utilise.

 Toute variable possède un nom et une valeur :

 message='Bonjour tout le monde'

Dans le cas présent :

 la variable a pour nom : message ;


 … et pour valeur : Bonjour tout le monde.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
81
 Ne mettez pas d'espaces autour du symbole égal
« = » ! Le bash est très pointilleux sur de nombreux
points, évitez par conséquent de le vexer.

 Je vous signalerai systématiquement les pièges à


éviter, car il y en a un certain nombre !

 Sivous voulez insérer une apostrophe dans la


valeur de la variable, il faut la faire précéder d'un
antislash \.
Exemple : message='Bonjour c\'est moi'
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
82
 echo : afficher une variable

 Sonprincipe est très simple : elle affiche dans la


console le message demandé.

Un exemple :

$ echo Salut tout le monde


Salut tout le monde

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


83
 En fait, la commande echo affiche dans la console
tous les paramètres qu'elle reçoit.

Ici, nous avons envoyé quatre paramètres :

 Salut ;
 tout ;
 le ;
 monde.

Chacun des mots est considéré comme un paramètre


que echo a affiché.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
84
 Si vous mettez des guillemets autour de votre message,
celui-ci sera considéré comme étant un seul et même
paramètre :

$ echo "Salut tout le monde"


Salut tout le monde

 Si vous voulez insérer des retours à la ligne, il faudra activer


le paramètre -e et utiliser le symbole \n :

$ echo -e "Message\nAutre ligne"


Message
Autre ligne
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
85
Afficher une variable :

 Pour afficher une variable, nous allons de nouveau


utiliser son nom précédé du symbole dollar $ :

#!/bin/bash
message='Bonjour tout le monde' #pas de $
echo $message

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


86
 Les quotes :

 Ilest possible d'utiliser des quotes pour délimiter


un paramètre contenant des espaces. Il existe trois
types de quotes :

 les apostrophes ' ' (simples quotes) ;

 les guillemets " " (doubles quotes) ;

 lesaccents graves `` (back quotes), qui s'insèrent


avec Alt Gr + 7 sur un clavier AZERTY français.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés 87
 Selon le type de quotes que vous utilisez, la réaction
de bash ne sera pas la même.

 Les simples quotes ' '

 Commençons par les simples quotes :

 message='Bonjour tout le monde'

 echo 'Le message est : $message'


Le message est : $message

Avec de simples quotes, la variable n'est pas analysée


et le $ est affiché tel quel.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
88
Les doubles quotes " " :

 Avec des doubles quotes :

message='Bonjour tout le monde'


echo "Le message est : $message"
Le message est : Bonjour tout le monde

Cette fois, la variable est analysée et son contenu


affiché.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
89
Les back quotes `` :

 Unpeu particulières, les back quotes demandent à


bash d'exécuter ce qui se trouve à l'intérieur.

 Exemple :

message=`pwd`
echo "Vous êtes dans le dossier $message"
Vous êtes dans le dossier /home/mateo21/bin

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


90
 read : demander une saisie

La façon la plus simple de l'utiliser est d'indiquer le


nom de la variable dans laquelle le message saisi
sera stocké : read nomvariable

Exemple :

#!/bin/bash
read nom
echo "Bonjour $nom !"
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
91
Affecter simultanément une valeur à plusieurs Variables :

 On peut demander de saisir autant de variables d'affilée que


l'on souhaite.

Exemple :

#!/bin/bash
read nom prenom
echo "Bonjour $nom $prenom !"

Deschamps Mathieu
Bonjour Deschamps Mathieu !
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
92
 read lit ce que vous tapez mot par mot (en considérant
que les mots sont séparés par des espaces).

 -p : afficher un message de prompt ou d’invite

 Bon : notre programme ne permet pas à l'utilisateur de


savoir quoi faire :

 Avec l'option -p de read, vous pouvez faire cela :

#!/bin/bash
read -p 'Entrez votre nom : ' nom
echo "Bonjour $nom !"
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
93
 -n : limiter le nombre de caractères

 Avec -n, vous pouvez au besoin couper au bout de X


caractères si vous ne voulez pas que l'utilisateur insère
un message trop long.

 Exemple :

#!/bin/bash
read -p 'Entrez votre login (5 caractères max) : ' -n 5 nom
echo -e "\nBonjour $nom !"

Entrez votre login (5 caractères max) : ahmed


Bonjour ahmed !

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


94
 -s : ne pas afficher le texte saisi
 Le paramètre -s masque les caractères que vous
saisissez.
 Cela vous servira notamment si vous souhaitez que
l'utilisateur entre un mot de passe :

 Exemple :

#!/bin/bash
read -p 'Entrez votre mot de passe : ' -s pass
echo -e "\nMerci ! Je vais dire à tout le monde que votre mot de passe est $pass ! «

Entrez votre mot de passe :


Merci ! Je vais dire à tout le monde que votre mot de passe est supertopsecret2018 !
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
95
 En bash, les variables sont toutes des chaînes de
caractères.

 Le bash n'est pas vraiment capable de manipuler


des nombres ;

 Il n'est donc pas capable d'effectuer des opérations.

 Heureusement, il est possible de passer par des


commandes.

 Ici, la commande à connaître est let.


Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
96
 Exemple :
let "a = 5"
let "b = 2"
let "c = a + b"

#!/bin/bash
let "a = 5"
let "b = 2"
let "c = a + b"
echo $c

À la fin de ce script, la variable $c vaudra ?7

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


97
 Les opérations utilisables sont :

 l'addition : +
 la soustraction : -
 la multiplication : *
 la division : /
 la puissance : **
 le modulo : %.

 Quelques exemples :

let "a = 5 * 3" # $a = 15


let "a = 4 ** 2" # $a = 16 (4 au carré)
let "a = 8 / 2" # $a = 4
let "a = 10 / 3" # $a = 3
let "a = 10 % 3" # $a = 1
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
98
 Notez
qu'il est possible aussi de contracter les
commandes, comme cela se fait en langage C.

Exemple :

let "a = a * 3" équivaut à let "a *= 3"

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


99
 Lesvariables que vous créez dans vos scripts bash
n'existent que dans ces scripts.

 Lesvariables d'environnement sont des variables


que l'on peut utiliser dans n'importe quel
programme.

On parle aussi parfois de variables globales.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


100
Les plus fameuses :

 SHELL : indique quel type de shell est en cours d'utilisation (sh,


bash, ksh…) ;

 PATH : une liste des répertoires qui contiennent des exécutables


que vous souhaitez pouvoir lancer sans indiquer leur répertoire.

 EDITOR : l'éditeur de texte par défaut qui s'ouvre lorsque cela est
nécessaire ;

 HOME : la position de votre dossier home ;

 PWD : le dossier dans lequel vous vous trouvez ;

 OLDPWD : le dossier dans lequel vous vous trouviez auparavant.


Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
101
 Exemple :

#!/bin/bash
echo "Votre éditeur par défaut est $EDITOR"

Votre éditeur par défaut est nano

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


102
 Vos scripts bash peuvent eux aussi accepter des
paramètres.

 Ainsi, on pourrait appeler notre script comme


ceci :

./[Link] param1 param2 param3

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


103
 Leproblème, c'est que nous n'avons toujours pas vu
comment récupérer ces paramètres dans notre
script.

 Pourtant, c'est très simple à réaliser !

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


104
 En effet, des variables de paramètres sont automatiquement
créées :

$# : contient le nombre de paramètres ;

$0 : contient le nom du script exécuté (ici ./[Link]) ;

$1 : contient le premier paramètre ;

$2 : contient le second paramètre ;

…;

$9 : contient le 9e paramètre ;
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
105
 Exemple :

#!/bin/bash
echo "Vous avez lancé $0, il y a $# paramètres"
echo "Le paramètre 1 est $1"

$ ./[Link] param1 param2 param3 ./[Link], il y a 3 pa


ramètres Le paramètre

Exemple : [Link]; [Link]

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


106
 Comme dans la plupart des langages de programmation,
on peut créer des variables en shell qui stockent
temporairement des valeurs en mémoire.

 Une variable nommée variable est accessible en


écrivant $variable.

 La commande echo affiche un texte ou le contenu


d'une variable dans la console.

 read attend une saisie au clavier de la part de


l'utilisateur et stocke le résultat dans une variable.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
107
 On peut effectuer des opérations mathématiques
sur des nombres à l’aide de la commande let.

 Certaines variables sont accessibles partout, dans


tous les scripts : ce sont les variables d'environnement.
On peut les lister avec la commande env.

 Les paramètres envoyés à notre script


(comme ./script -p) sont transmis dans des variables
numérotées : $1,$2,$3…
 Le nombre de paramètres envoyés est indiqué dans la
variable $#.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
108
 Ce sont des variables qui contiennent plusieurs cases, comme un
tableau.

 Pour définir un tableau, on peut écrire :

tableau=('valeur0' 'valeur1' 'valeur2')

 Cela crée une variable tableau qui contient trois valeurs


(valeur0, valeur1, valeur2).

 Pour accéder à une case du tableau, il faut utiliser la syntaxe


suivante :

${tableau[2]}
… ceci affichera le contenu de la case n° 2 (donc valeur2).
Les cases sont numérotées à partir de 0 !
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
109
 Exemple : [Link], [Link]

#!/bin/bash
tableau=('valeur0' 'valeur1' 'valeur2')
tableau[5]='valeur5'
echo ${tableau[1]}

Res : valeur1
 Vous pouvez afficher l'ensemble du contenu du tableau d'un seul coup en
utilisant ${tableau[*]} :

 Exemple :

#!/bin/bash
tableau=('valeur0' 'valeur1' 'valeur2')
tableau[5]='valeur5'
echo ${tableau[*]}

Res : valeur0 valeur1 valeur2 valeur5

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


110
 if : la condition la plus simple

La syntaxe en bash est la suivante :

if [ test ] if [ test ]; then

then
echo "C'est vrai"
echo "C'est vrai"

fi fi

Notez : il y a des espaces à l'intérieur des crochets.


On ne doit pas écrire[test] mais [ test ] !
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
111
 Exemple :

#!/bin/bash
nom= "Ahmed" #*
if [ $nom = "Ahmed" ]
then
echo "Salut Ahmed !"
fi

Affiche : Salut Ahmed #car*


Exemple : [Link],
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
112
 Notez aussi que vous pouvez tester deux variables à la
fois dans le if :

 Exemple : [Link]

#!/bin/bash
nom1= "Ahmed"
nom2= "Ali"
if [ $nom1 = $nom2 ]; then
echo "Salut les jumeaux !"
fi

 Comme ici $nom1 est différent de$nom2, le contenu du


if ne sera pas exécuté. Le script n'affichera donc rien.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
113
Syntaxe :

if [ test ]

then
echo "C'est vrai"
else
echo "C'est faux"
fi

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


114
 Exemple : [Link]

#!/bin/bash
nom= "Ahmed"
if [ $nom = "Ali" ]
then
echo "Salut Ali !"
else
echo "J'te connais pas, ouste !"
fi
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
115
 Je vous propose plutôt de vous baser sur le premier paramètre ($1)
envoyé au script :

#!/bin/bash

if [ $1 = "Ahmed" ]; then

echo "Salut Ahmed!"

else

echo "J'te connais pas, ouste !"

fi

Testez maintenant votre script :./[Link] Ahmed


Exemple : [Link]

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


116
 Syntaxe :

if [ test ] ; then

echo "Le premier test a été vérifié"

elif [ autre_test ]

then
echo "Le second test a été vérifié"

elif [ encore_autre_test ]

then
echo "Le troisième test a été vérifié"

else
echo "Aucun des tests précédents n'a été vérifié"
fi
Exemple : [Link]

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


117
Tests sur des chaînes de caractères :

 en bash toutes les variables sont considérées comme


des chaînes de caractères.
Condition Signification
$chaine1 = $chaine2 Vérifie si les deux chaînes sont
identiques.
Il est aussi possible d'écrire « == »
pour les habitués du langage C.
$chaine1 != $chaine2 Vérifie si les deux chaînes sont
différentes.
-z $chaine Vérifie si la chaîne est vide.
-n $chaine Vérifie si la chaîne est non vide.

Exemple : [Link]
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
118
 On peut aussi vérifier si le paramètre existe avec-z (vérifie si la chaîne est
vide).
 En effet, si une variable n'est pas définie, elle est considérée comme vide par
bash.
 On peut donc par exemple s'assurer que $1 existe en faisant comme suit :

Exemple : [Link]

#!/bin/bash
if [ -z $1 ]; then
echo "Pas de paramètre"
else echo "Paramètre présent"
fi

$ ./[Link]
Pas de paramètre
$ ./[Link] param
Paramètre présent

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


119
 Test sur des nombres :

Condition Signification
$num1 -eq $num2 Vérifie si les nombres sont égaux (equal). À ne pas confondre avec le
«=»
$num1 -ne $num2 Vérifie si les nombres sont différents (nonequal). Encore une fois, ne
confondez pas avec « != »

$num1 -lt $num2 Vérifie si num1 est inférieur ( < ) à num2 (lowerthan)

$num1 -le $num2 Vérifie si num1 est inférieur ou égal ( <= ) à num2 (lowerorequal)

$num1 -gt $num2 Vérifie si num1 est supérieur ( > ) à num2 (greaterthan).

$num1 -ge $num2 Vérifie si num1 est supérieur ou égal ( >= ) à num2(greaterorequal).

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


120
 Exemple : [Link]

#!/bin/bash
if [ $1 -ge 20 ]
then echo "Vous avez envoyé 20 ou plus"
else echo "Vous avez envoyé moins de 20"
fi

$ ./[Link] 23
Vous avez envoyé 20 ou plus

$ ./[Link] 11
Vous avez envoyé moins de 20
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
121
 Tests sur des fichiers :

 Un des avantages de bash sur d'autres langages est


que l'on peut très facilement faire des tests sur des
fichiers.
Condition Signification
-e $nomfichier Vérifie si le fichier existe.

-d $nomfichier Vérifie si le fichier est un répertoire. N'oubliez pas


que sous Linux, tout est considéré comme un fichier,
même un répertoire !

-f $nomfichier Vérifie si le fichier est un… fichier. Un vrai fichier


cette fois, pas un dossier.

-L $nomfichier Vérifie si le fichier est un lien symbolique (raccourci).

-r $nomfichier Vérifie si le fichier est lisible (r).

-w $nomfichier Vérifie si le fichier est modifiable (w).

-x $nomfichier Vérifie si le fichier est exécutable (x).

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés 122


 Je vous propose de faire un script qui demande l'utilisateur
d'entrer le nom d'un répertoire et qui vérifie si c’est bien un :

#!/bin/bash
read -p 'Entrez un répertoire : ' repertoire
if [ -d $repertoire ]
then echo "Bien, vous avez compris ce que j'ai dit !
else echo "Vous n'avez rien compris..."
fi

Entrez un répertoire : /home


Bien, vous avez compris ce que j'ai dit !

Entrez un répertoire : [Link]


Vous n'avez rien compris...
Exemple : [Link]
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
123
 Effectuer plusieurs tests à la fois

Dans un if, il est possible de faire plusieurs tests à


la fois.

Les deux symboles à connaître sont :

&& : signifie « et » ;
|| : signifie « ou ».

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


124
 Il faut encadrer chaque condition par des crochets.

Exemple :

#!/bin/bash
if [ $# -ge 1 ] && [ $1 = 'vrai' ]
then echo "Bravo !"
echo "Vous connaissez le mot de passe"
else echo "Vous n'avez pas le bon mot de passe"
fi

$ ./[Link] vrai
Bravo ! Vous connaissez le mot de passe
#à condition que la 1ere condition soit satisfaite.
Exemple : [Link], [Link]
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
125
 Inverser un test :

Il est possible d'inverser un test en utilisant la


négation :

if [ ! -e fichier ]
then echo "Le fichier n'existe pas"
fi

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


126
case : tester plusieurs conditions à la fois

Exemple : [Link], [Link]

#!/bin/bash
case $1 in
"Ahmed") echo "Salut Ahmed !"
;;
"Ali") echo "Bien le bonjour Ali"
;;
"Jamal") echo "Hé Jamal, ça va ?"
;;
*) #rôle du default en C

echo "J'te connais pas, ouste !"


;;
esac #Marque le fin du case

# ;; le double point-virgule dit à bash d'arrêter là, la lecture du case, si la condition


est verifiée.
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
127
 Oneffectue des tests dans ses programmes grâce
aux if, then, [[ elif, then, fi] else,] fi.

 Onpeut comparer deux chaînes de caractères


entre elles, mais aussi des nombres.

 On peut également effectuer des tests sur des


fichiers : est-ce que celui-ci existe ? Etc.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


128
 Aubesoin, il est possible de combiner plusieurs
tests à la fois avec les symboles&&(ET) et||(OU).

 Lesymbole ! (point d'exclamation) exprime la


négation dans une condition.

 Lorsquel'on effectue beaucoup de tests sur une


même variable, il est parfois plus pratique d'utiliser
un bloc case in… esac plutôt qu'un bloc if… fi.

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


129
 while : boucler « tant que »

while [ test ] while [ test ]; do

do echo 'Action en boucle'


echo 'Action en boucle'
done done

 Exemple : [Link]

#!/bin/bash
while [ -z $reponse ] || [ $reponse != 'oui' ]
do
read -p 'Dites oui : ' reponse
done

Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés


130
for : boucler sur une liste de valeurs

En bash, la boucle for s'écrit comme ceci :

#!/bin/bash

for variable in 'valeur1' 'valeur2' 'valeur3'

do

echo "La variable vaut $variable"

done
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
131
 Ce qui donne, si on l'exécute :

La variable vaut valeur1


La variable vaut valeur2
La variable vaut valeur3

 Toutefois, la liste de valeurs n'a pas besoin d'être définie


directement dans le code.

On peut utiliser une variable :

#!/bin/bash
liste_fichiers=`ls`
for fichier in $liste_fichiers
do
echo "Fichier trouvé : $fichier"
done
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
132
Un for plus classique :

 En bash, comme on l'a vu, le for permet de parcourir une


liste de valeurs.

 Toutefois, en trichant un peu à l'aide de la commande seq, il


est possible de simuler un for classique :

#!/bin/bash
for i in `seq 1 10`;
do
echo $i
done

Seq : génère tous les nombres allant du premier


paramètre au dernier paramètre.
Exemple : [Link]
Pr. M. Alaoui Talibi SIC-GE, INSA EM, Fés
133
 Comment déclarer une fonction :

# déclaration méthode 1 # déclaration méthode 2

maFonction () function maFonction

{ {
bloc d’instructions bloc d’instructions
} }

#appel de ma fonction #appel de la fonction

maFonction maFonction
 Vous pouvez déclarer une fonction Bash avec maFonction()
ou function maFonction.

 Vous faites ensuite appel à votre fonction maFonction() en


tapant simplement dans votre code maFonction. 134

Vous aimerez peut-être aussi