Système d’exploitation – UNIX
Programmation SHELL
Partie 2
Les SHELL Scripts
Concepts de base
Pr. Khadija OUAZZANI TOUHAMI 1
Système d’exploitation – UNIX
Programmation SHELL
1. Interactivité
Les Shell Scripts interactifs sont basés sur :
✓ les commandes shell « read » et « echo »
✓ l’usage de messages et de variables
Exemple : Le Shell Script «Exo»
Exo
echo Cher utilisateur, quel est ton nom \?
read nom
echo Bienvenue $nom
Le backslash « \ » permet d’inhiber l’interprétation du
caractère « ? ».
Pr. Khadija OUAZZANI TOUHAMI 2
Système d’exploitation – UNIX
Programmation SHELL
1. Interactivité
Exécution de Exo :
2 façons de procéder pour exécuter le shell script Exo :
➢ Créer un sous shell par la commande sh pour le faire :
$ sh Exo
➢ Rendre le shell script Exo exécutable, puis l’exécuter
directement par son nom :
$ chmod u+x Exo
$ Exo
Pr. Khadija OUAZZANI TOUHAMI 3
Système d’exploitation – UNIX
Programmation SHELL
1. Interactivité
Résultats de Exo :
Cher utilisateur, quel est ton nom ?
paul
Bienvenue paul
Remarque :
Par la même commande « read », on peut lire plusieurs
variables, les valeurs peuvent être rentrées sur la même
ligne, sous forme de plusieurs mots séparés par des espaces:
Exemple : $ read nom1 nom2
unix windows
Pr. Khadija OUAZZANI TOUHAMI 4
Système d’exploitation – UNIX
Programmation SHELL
2. Arguments ou Paramètres
La plupart des commandes shell acceptent des paramètres
ou arguments.
Exemple : $ mv F1 F2
La même approche est valable pour les shell scripts.
Les arguments d’un shell script sont référencés par leur
position dans la liste des paramètres. D’où le nom
d’arguments ou de paramètres positionnels. A savoir :
$1 : premier paramètre ou argument positionnel
$2 : second
etc.
Pr. Khadija OUAZZANI TOUHAMI 5
Système d’exploitation – UNIX
Programmation SHELL
2. Arguments ou Paramètres
Conventions :
$0 : nom de la commande ou du shell script lui-même
$* : liste des arguments
$# : nombre d’arguments
Exemple : Fichier de commandes ou shell script «Expliquer»
Expliquer
echo Je suis le shell script $0
echo J\’ai $# arguments
echo Mes arguments sont $*
echo Mon premier argument est $1
Pr. Khadija OUAZZANI TOUHAMI 6
Système d’exploitation – UNIX
Programmation SHELL
2. Arguments ou Paramètres
Exécution :
$ sh Expliquer MOI LES ARGUMENTS
Ou bien
$ chmod u+x Expliquer
$ Expliquer MOI LES ARGUMENTS
Résultats :
Je suis le shell script Expliquer
J’ai 3 arguments
Mes arguments sont MOI LES ARGUMENTS
Mon premier argument est MOI
Pr. Khadija OUAZZANI TOUHAMI 7
Système d’exploitation – UNIX
Programmation SHELL
2. Arguments ou Paramètres
Autre exemple :
Un shell script avec paramètres mais non interactif :
Exo1
cat $1 $2 > $3
cp $3 $HOME/stockage/$[Link]
Exécution :
$ chmod u+x Exo1
$ Exo1 F1 F2 F1F2
Résultats : Rien à l’écran
Pr. Khadija OUAZZANI TOUHAMI 8
Système d’exploitation – UNIX
Programmation SHELL
3. Substitution de commande
Usage du méta caractère back quotte ou anti quotte «` ».
Lorsqu’une chaîne de caractères est entourée par « ` », elle
est interprétée comme une commande et est remplacée par
son résultat.
Exemples :
$ echo date
date
$ echo `date`
Mon feb 10 [Link]
Pr. Khadija OUAZZANI TOUHAMI 9
Système d’exploitation – UNIX
Programmation SHELL
3. Substitution de commande
$ set ` date `
permet de positionner les paramètres
par rapport au résultat :
$1 : Mon
$2 : feb
$3 : 10
$4 : [Link]
$ echo $1
Mon
Pr. Khadija OUAZZANI TOUHAMI 10
Système d’exploitation – UNIX
Programmation SHELL
3. Substitution de commande
Remarque :
La commande « set » utilisée dans un shell script qui a ses
paramètres écrasera les valeurs initiales des paramètres
positionnels, à savoir les paramètres par défaut du shell
script.
Pour ne pas perdre les valeurs initiales des paramètres d’un
shell script après l’usage de la commande « set », celles-ci
doivent être sauvegardées au préalable.
Pr. Khadija OUAZZANI TOUHAMI 11
Système d’exploitation – UNIX
Programmation SHELL
4. Scripts, pipes, filtres et redirections
Pipes et filtres :
Soit le shell script paramétré lprn suivant :
lprn
cat $* | pr | lpr
Concaténation Formateur Commande
des arguments (date, n° page) d’impression
$ chmod u+x lprn
$ lprn F G H
Pr. Khadija OUAZZANI TOUHAMI 12
Système d’exploitation – UNIX
Programmation SHELL
4. Scripts, filtres, pipes et redirections
$ ls *.c | sort | lprn
Liste des fichiers Tri Sortie
se terminant par .c alphabétique
ls *.c lpr
Shell sort pr
$ Impression
lprn Cat $*
Pr. Khadija OUAZZANI TOUHAMI 13
Système d’exploitation – UNIX
Programmation SHELL
4. Scripts, filtres, pipes et redirections
Remarque : Les pipes et les filtres peuvent être utilisés à
l’intérieur des shell scripts. Ils peuvent également être
utilisés à l’extérieur des shell scripts.
Redirections :
Soit le shell script paramétré srch suivant :
srch
grep $1 < /usr/users/paul/agenda
Le shell srch cherche dans le fichier agenda de paul la chaîne
de caractères représentée par le paramètre positionnel $1.
Pr. Khadija OUAZZANI TOUHAMI 14
Système d’exploitation – UNIX
Programmation SHELL
4. Scripts, filtres, pipes et redirections
Exemple :
$ chmod u+x srch
$ srch casa > contacts_casa
Les lignes du fichier agenda contenant la chaîne «casa»
seront redirigées vers le fichier «contacts_casa».
Remarque :
Les redirections peuvent être utilisées à l’intérieur des shell
scripts. Elles peuvent également être utilisées à l’extérieur
des shell scripts.
Pr. Khadija OUAZZANI TOUHAMI 15
Système d’exploitation – UNIX
Programmation SHELL
5. Caractères spéciaux
Les caractères spéciaux peuvent être utilisés :
➢ Sur une ligne de commande :
✓ avec des commandes shell
✓ avec des commandes utilisateurs ou shell
scripts
➢ Dans un shell script
Pr. Khadija OUAZZANI TOUHAMI 16
Système d’exploitation – UNIX
Programmation SHELL
5. Caractères spéciaux 5.1. Commandes séquentielles
Plusieurs commandes sur une même ligne, séparées par des
points virgules, de la façon suivante :
cmd1 ; cmd2 ; cmd3
Exemples :
➢ Dans un shell script :
cours=unix ; annee=2022 ; classe=3eme ; sem=2
➢ Sur une ligne de commande :
$ date ; ls ; who
$ date ; srch casa > contacts_casa
Pr. Khadija OUAZZANI TOUHAMI 17
Système d’exploitation – UNIX
Programmation SHELL
5. Caractères spéciaux 5.2. Commandes Backgound
Exécuter une commande en arrière plan ou en background de
la façon suivante :
cmd &
En effet, 2 modes d’exécution d’une commande :
➢ Mode foreground :
✓ commande bloquante
✓ le shell se bloque en attendant que le
processus soit terminé, après quoi il est réactivé
Exemple : $ ls
$ Exo1 F G H
Pr. Khadija OUAZZANI TOUHAMI 18
Système d’exploitation – UNIX
Programmation SHELL
5. Caractères spéciaux 5.2. Commandes Backgound
➢ Mode background
✓ commande non bloquante
✓ le contrôle est rendu au shell appelant
immédiatement
✓ les processus père (shell) et fils s’exécutent
en parallèle
Exemple :
$ cp -r gros-rep rep &
$ Exo1 &
Pr. Khadija OUAZZANI TOUHAMI 19
Système d’exploitation – UNIX
Programmation SHELL
5. Caractères spéciaux 5.2. Commandes Backgound
Remarques :
➢ possibilité d’usage des redirections
d’E/S avec le mode arrière plan
➢ l’exécution d’un processus en
background ne change pas l’entrée et la
sortie standard de celui-ci
Pr. Khadija OUAZZANI TOUHAMI 20
Système d’exploitation – UNIX
Programmation SHELL
5. Caractères spéciaux 5.3. Groupement de commandes
Grouper plusieurs commandes séquentielles, par l’usage des
parenthèses, de la façon suivante :
(cmd1 ; cmd2 ; cmd3)
Le but étant généralement de fusionner leurs résultats.
Exemple :
$ (date ; cat resultat) > datres
Concaténation de la date du jour et du contenu du
fichier «resultat» dans un fichier en sortie «datres».
Pr. Khadija OUAZZANI TOUHAMI 21
Système d’exploitation – UNIX
Programmation SHELL
5. Caractères spéciaux 5.4. Redirections
Exécution d’un shell script
Processus
Input Output Error
0 1 2
Entrée Sortie Erreur
standard standard standard
Clavier Ecran Ecran
par défaut par défaut par défaut
Pr. Khadija OUAZZANI TOUHAMI 22
Système d’exploitation – UNIX
Programmation SHELL
5. Caractères spéciaux 5.4. Redirections
Exemple :
$ sort < agenda > [Link] 2 > errlog &
Remarque :
2 > &1 Redirection de la sortie d’erreur vers la sortie
des résultats
1 > &2 Redirection de la sortie des résultats vers la
sortie d’erreur
Exemple : un message d’erreur dans un shell script
echo fichier $nom inexistant 1 > &2
Pr. Khadija OUAZZANI TOUHAMI 23
Système d’exploitation – UNIX
Programmation SHELL
6. Notion d’état de sortie
Etat de sortie ou exit status d’une commande :
✓ Terminaison correcte exit 0
✓ Terminaison incorrecte exit == 0
Exemple :
$ grep mot fichier
exit 0 : mot trouvé
exit 1 : mot non trouvé
exit 2 : pattern incorrect
Pr. Khadija OUAZZANI TOUHAMI 24
Système d’exploitation – UNIX
Programmation SHELL
7. Variables spéciales
$0 : nom de la commande en cours
$* : liste des paramètres positionnels
$# : nombre de paramètres positionnels
$$ : n° de processus du shell courant
$! : n° de processus du dernier processus en background
$? : état de sortie de la dernière commande exécutée
Pr. Khadija OUAZZANI TOUHAMI 25
Système d’exploitation – UNIX
Programmation SHELL
7. Variables spéciales
Exemple :
$ who >> Fwho
$ echo $? # état de sortie dernière commande?
0
$ cp -r gros-rep rep &
3657 # pid du processus lancé en background
$ echo $! # pid du dernier processus en background
3657
$
Pr. Khadija OUAZZANI TOUHAMI 26
Système d’exploitation – UNIX
Programmation SHELL
8. Mécanismes d’échappement
Echapper à l’interprétation, ou inhiber l’interprétation, des
caractères spéciaux :
\ (back slash) : négation d’un méta caractère
‘…’ (simple quottes) : négation de tous les méta caractères
’’…’’ (double quottes) : interprétation de $ , ` (back quotte) et
\ (back slash). Et non interprétation
de tous les autres.
Pr. Khadija OUAZZANI TOUHAMI 27
Système d’exploitation – UNIX
Programmation SHELL
8. Mécanismes d’échappement
Exemple :
$ echo `date`
Mon feb 10 17:00
$ echo ’Nous sommes le `date`’
Nous sommes le `date`
$ echo ’’Nous sommes le `date`’’
Nous sommes le Mon feb 10 17:00
$ set `date`
$ echo ’’Nous sommes le \’’ $1 \’’ ’’
Nous sommes le ’’Mon’’
Pr. Khadija OUAZZANI TOUHAMI 28
Système d’exploitation – UNIX
Programmation SHELL
8. Mécanismes d’échappement
$ echo ’Ceci est une <rc>
> tres longue <rc>
> phrase …’ <rc>
Ceci est une
tres longue
phrase …
$ echo Voici une etoile: \*
Voici une etoile: *
# Ceci est un commentaire
# Une commande nulle
Pr. Khadija OUAZZANI TOUHAMI 29