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