Vous êtes sur la page 1sur 56

Introduction aux systèmes

d’exploitation
Mohamed Keita

Octobre 2021
1.
Langage Bash
27/10/2021 7

Le terminal
Porte d’entrée d’un ordinateur Un terminal offre

Un canal pour entrer des données


Un canal pour afficher des données
27/10/2021 8

Le terminal
Un ordinateur na pas toujours un terminal intégré
27/10/2021 9

Terminal virtualisé
Émule le comportement d’un terminal physique dans un autre terminal

Terminaux virtuels
27/10/2021 10

Le terminal

Un processus communique avec l’utilisateur via un terminal

Canal
d’entrée

Processus utilisateur
Canal
de sortie

Terminal d’attache du
processus
27/10/2021 11

Le shell

Shell en mode graphique Shell en mode texte


27/10/2021 12

Bash

Interpréteur de commandes

• Lit des commandes (à partir du terminal ou d’un fichier)


• Exécute les commandes
• Écrit les résultats sur son terminal d’attache

Bash définit un langage, appelé le langage bash

• Structure de contrôle classiques


• (if, while, for, etc.)
• Variables

Bénéficie d’un accès rapide aux mécanismes offert par le noyau de l’OS
27/10/2021 13

Un texte bash

Formé de mots bash


Un mot bash est :
Formé de caractères séparés par des délimiteurs (délimiteurs : espace, tabulation, retour à la ligne)
Exemple : Coucou=42!* est un unique mot
Exceptions:
; & && | || ( ) ` sont des mots ne nécessitant pas de délimiteurs
Si une chaîne de caractères est entourée de "" ou '', bash considère un unique mot
Bsh est sensible à la casse -> Majuscule minuscule
27/10/2021 14

Un texte bash

Un texte est formé de mots

Ici nous avons 5 mots

" En bash, ceci est un unique "mot" y compris mot milieu"

Voici, trois, mots

" zip "@é§èçà°-_¨^$%ù£,.:+=' est un autre unique mot’

Nous|avons;NEUF&&mots&ici
27/10/2021 15

Un texte bash

Un texte est formé de mots

Ici nous avons 5 mots


t s q u e c es
i t d e s m o
" En bash, ceci est un unique q u ’ o n
"mot" é cry compris mot milieu"
p a s p a r c e o u r b a sh
C e n ’e s t u n s e n s p
m o ts on t
Voici, trois, mots d e d e u x
c o n s t i tu é
!3 : b i p e s t r b a s h
e c h o y o p n s i b p
le mot’a
l e :
" zip "@é§èçà°-_¨^$%ù£,.:+=' est un é
autre
pr h e unique
Ex e m p ’ e s tp a s c o m
a i s n
m ots m
Nous|avons;NEUF&&mots&ici
27/10/2021 16

Invocation d’une commande bash

Invocation d’une commande


Var1=var10 var2=var20… cmd arg1 arg2…
Tout est optionnel sauf cmd
Lance la commande cmd avec les arguments arg1, arg2… et les variables var1, var2…
affectées aux valeurs val1, val2…
$
27/10/2021 17

Invocation d’une commande bash

Invocation d’une commande


Var1=var10 var2=var20… cmd arg1 arg2…
Tout est optionnel sauf cmd
Lance la commande cmd avec les arguments arg1, arg2… et les variables var1, var2…
affectées aux valeurs val1, val2…
$ echo Salut tout le monde
27/10/2021 18

Invocation d’une commande bash

Invocation d’une commande


Var1=var10 var2=var20… cmd arg1 arg2 …
Tout est optionnel sauf cmd
Lance la commande cmd avec les arguments arg1, arg2… et les variables var1, var2…
affectées aux valeurs val1, val2…
$ echo Salut tout le monde
27/10/2021 19

Invocation d’une commande bash

Invocation d’une commande


Var1=var10 var2=var20… cmd arg1 arg2…
Tout est optionnel sauf cmd
Lance la commande cmd avec les arguments arg1, arg2… et les variables var1, var2…
affectées aux valeurs val1, val2…
$ echo Salut tout le monde
Salut tout le monde
27/10/2021 20

Invocation d’une commande bash

Invocation d’une commande


Var1=var10 var2=var20… cmd arg1 arg2…
Tout est optionnel sauf cmd
Lance la commande cmd avec les arguments arg1, arg2… et les variables var1, var2…
affectées aux valeurs val1, val2…
$ echo "Salut tout le monde"
27/10/2021 21

Invocation d’une commande bash

Invocation d’une commande


Var1=var10 var2=var20… cmd arg1 arg2…
Tout est optionnel sauf cmd
Lance la commande cmd avec les arguments arg1, arg2… et les variables var1, var2…
affectées aux valeurs val1, val2…
$ echo "Salut tout le monde"
27/10/2021 22

Invocation d’une commande bash

Invocation d’une commande


Var1=var10 var2=var20… cmd arg1 arg2…
Tout est optionnel sauf cmd
Lance la commande cmd avec les arguments arg1, arg2… et les variables var1, var2…
affectées aux valeurs val1, val2…
$ echo "Salut tout le monde"
Salut tout le monde
27/10/2021 23

RTFM

Man 1 cmd
man pour manuel : donne de l’aide
1 indique la section d’aide de la commande
1 : commandes
cmd : Correspond à la commande dont on veut consulter le manuel
$ man ls
27/10/2021 24

RTFM

Man 1 cmd
man pour manuel : donne de l’aide
1 indique la section d’aide de la commande
1 : commandes
cmd : Correspond à la commande dont on veut consulter le manuel
27/10/2021 25

Les caractères spéciaux

Caractères spéciaux • \ ' ` " > < $ # * ~ ? ;( ) { }


(' est appelé quote ou apostrophe alors que ` est appelé antiquote ou accent
grave)
Désactiver l’interprétation des caractères spéciaux
\ désactive l’interprétation spéciale du caractère suivant
'…' ⇒ désactive l’interprétation dans toute la chaîne
"…" ⇒ seuls sont interprétés les caractères $ \ ` (accent grave)
27/10/2021 26

Script bash

Programme bash = texte bash dans un fichier texte


Interprétable par bash au lancement par l’utilisateur
Modifiable par un éditeur de texte (p. ex. emacs, vi)
Un programme bash doit être rendu exécutable avec : chmod u+x mon_script.sh
Par convention, les noms de script sont suffixés par l’extension « .sh »
mon_script.sh
Invocation du script nommé mon_script.sh avec
./mon_script.sh
Avec ses arguments : ./mon_script.sh arg1 arg2
./ indique que le script se trouve
dans le répertoire courant
27/10/2021 27

Structure d’un script bash


Première ligne : #!/bin/bash
#! : indique au système que ce fichier est un ensemble de commandes à exécuter par
l’interpréteur dont le chemin suit
par exemple : /bin/sh, /usr/bin/perl, /bin/awk, etc.
/bin/bash lance bash
Séquence structuré de commande shell
#!/bin/bash

Command1
Command2
… Mon_script.sh

Sortie implicite du script à la fin du fichier


Sortie explicite avec la commande exit
27/10/2021 28

Variables bash

Déclaration/affectation avec le signe =


exemple ma_var=valeur
Consultation en préfixant du caractère $ (exemple $ma_var)
Saisie interactive : read var1 var2 ... varn
Lecture d’une ligne saisie par l’utilisateur (jusqu’au retour chariot)
Le premier mot va dans var1
Le second dans var2
Tous les mots restants vont dans varn
27/10/2021 29

Variables bash

Déclaration/affectation avec le signe =


e n t i o n
A tt
exemple ma_var=valeur
u r
= v a l e
Consultation en préfixant du a v a r
_caractère $ (exemple $ma_var)
a n s m v a r
a c e d s $ m a _
Saisie interactive d ’ e s p
: read e d
var1 a n var2 ... varn e u n
P a s s pa c é ci a l
a s d ’ e o n s p
P
Lecture d’une ligne saisie par l’utilisateur d e f a ç (jusqu’au retour chariot)
r p rè t e
Le premier mot va dansh t e
invar1 ot
s , b a s m
x c a
udans var2uni q u e
Le second
le s d e
D a n s
Tous les mots restants vont dans varn
27/10/2021 30

Variables bash
$
27/10/2021 31

Variables bash
$ a=42
$
27/10/2021 32

Variables bash
$ a=42
$ echo $a
42
$
27/10/2021 33

Variables bash
$ a=42
$ echo $a
42
$ s=‘Hello World !!!'
27/10/2021 34

Variables bash
$ a=42
$ echo $a
42
$ s=‘Hello World !!!’
Hello World !!!
$
27/10/2021 35

Variables bash
$ a=42
$ echo $a
42
$ s=‘Hello World !!!’
Hello World !!!
$ read x Saisi par l’utilisateur
Ceci est une phrase
$
27/10/2021 36

Variables bash
$ a=42
$ echo $a
42
$ s=‘Hello World !!!’
Hello World !!!
$ read x
Ceci est une phrase
$ echo $x
Ceci est une phrase
$ read x y Saisi par l’utilisateur
Ceci est une phrase
$
27/10/2021 37

Variables bash
$ a=42
$ echo $a
42
$ s=‘Hello World !!!’
Hello World !!!
$ read x
Ceci est une phrase
$ echo $x
Ceci est une phrase
$ read x y
Ceci est une phrase
$ echo $x Premier mot
Ceci
$
27/10/2021 38

Variables bash
$ a=42
$ echo $a
42
$ s=‘Hello World !!!’
Hello World !!!
$ read x
Ceci est une phrase
$ echo $x
Ceci est une phrase
$ read x y
Ceci est une phrase
$ echo $x Premier mot
Ceci
$ echo $y Tout les mots qui suivent

est une phrase


27/10/2021 39

Schéma algorithmique séquentiel

Suite de commandes les unes après les autres


Sur des lignes séparées
Sur une même ligne en utilisant le caractère point virgule (;) pour
séparateur
27/10/2021 40

Schéma alternatif (if)

if cond; then
cmds
Schéma alternatif simple elif cond; then
cmds
Si alors … sinon (si alors … sinon …) else
elif et else sont optionnels cmds
fi
27/10/2021 41

Conditions de test

Tests sur des valeurs numériques


[ n1 –eq n2 ] : vrai si n1 est égal à n2
[ n1 –ne n2 ] : vrai si n1 est différent de n2
[ n1 –gt n2 ] : vrai si n1 supérieur strictement à n2
[ n1 –ge n2 ] : vrai si n1 supérieur ou égal à n2
[ n1 –lt n2 ] : vrai si n1 inférieur strictement à n2
[ n1 –le n2 ] : vrai si n1 est inférieur ou égal à n2
27/10/2021 42

Conditions de test

Tests sur des chaînes de caractères


[ mot1 = mot2 ] : vrai si mot1 est égale à mot2
[ mot1 != mot2 ]: vrai si mot1 n’est pas égale à mot2
[ -z mot ] : vrai si mot est le mot vide
[ -n mot ] : vrai si mot n’est pas le mot vide
27/10/2021 43

Conditions de test

Tests sur des chaînes de caractères


[ mot1 = mot2 ] : vrai si mot1 n est égale à mot2
t e n t i o
[ mot1 != mot2 ]: vrai At si mot1 n’est pas égale s o n tà mot2
o l a d e s
l e s a c
cvide
[ -z mot ] : vrai si motaest p r le
ès mot
a n t e t ! le mot vide
[ -n mot ]a c: e a
vraiv si mot t
n’est
n i e l s
pas
e s e s p e s s e
L
27/10/2021 44

Remarque sur les conditions

[ cond ] est un raccourci pour la commande test cond


test est une commande renvoyant vrai (valeur 0) ou faux (valeur
différente de 0) en fonction de l’expression qui la suit
if [ $x –eq 42 ] ; then
echo salut
fi
Équivaut à
if test $x –eq 42; then
echo salut
fi
27/10/2021 45

Schéma alternatif (if)


if cond; then
cmds
elif cond; then
cmds
else
Schéma alternatif simple cmds
fi
Si alors … sinon (si alors … sinon …)
elif et else sont optionnels
x=1
y=2
if [ $x -eq $y ]; then
echo "$x = $y"
elif [ $x -ge $y ]; then
echo "$x >= $y"
else
echo "$x < $y"
fi
27/10/2021 46

Schéma alternatif (case)


if cond; then
cmds
elif cond; then
Schéma alternatif multiple cmds
else
Si mot vaut motif1 … cmds
Sinon si mot vaut motif2 … fi

Sinon …
case mot in
Motif : chaîne de caractères pouvant utiliser motif1)
des méta-caractères …;;
motif2)
*) correspond au cas par défaut …;;
*)
…;;
esac
27/10/2021 47

Schéma itératifs

Boucle
while while cond; do
Tant que … faire … done
cmds

Mot clé break pour sortir de la boucle


27/10/2021 48

Schéma itératifs

Boucle
while while cond; do
Tant que … faire … done
cmds

Mot clé break pour sortir de la boucle


x=10
while [ $x –ge 0 ]; do
read x
echo $x
done
27/10/2021 49

Schéma itératifs
while cond; do
cmds
done

Boucle
while x=10
while [ $x –ge 0 ]; do
Tant que … faire … read x
echo $x
Mot clé break pour sortir de la boucle done

for
Pour chaque … dans … faire … for var in liste; do
cmds
var correspond à la variable d’itération done

liste : ensemble sur lequel var itère


27/10/2021 50

Schéma itératifs
while cond; do
cmds
done

Boucle
while x=10
while [ $x –ge 0 ]; do
Tant que … faire … read x
echo $x
Mot clé break pour sortir de la boucle done

for
Pour chaque … dans … faire … for var in liste; do
cmds
var correspond à la variable d’itération done

liste : ensemble sur lequel var itère


for var in 1 2 3 4; do
echo $var
done
27/10/2021 51

Arguments d’une commande

mon_script.sh arg1 arg2 arg3 arg4 …


⇒ chaque mot est stocké dans une variable numérotée
mon_script.sh arg1 arg2 arg3 arg4 …

"$0" "$1" "$2" "$3" "$4" …

"$0" : toujours le nom de la commande


"$1" … "$9" : les paramètres de la commande
$# : nombre de paramètres de la commande
"$@" : liste des paramètres : "arg1" "arg2" "arg3" "arg4" …
27/10/2021 52

Arguments d’une commande


#! /bin/bash
for i in "$@"; do
echo $i
done mon_echo.sh

$
27/10/2021 53

Arguments d’une commande


#! /bin/bash
for i in "$@"; do
echo $i
done mon_echo.sh

$ ./mon_echo.sh
27/10/2021 54

Arguments d’une commande


#! /bin/bash
for i in "$@"; do
echo $i
done mon_echo.sh

$ ./mon_echo.sh
$ ./mon_echo.sh toto titi tata
toto
titi
tata
$
27/10/2021 55

Arguments d’une commande


#! /bin/bash
for i in "$@"; do
echo $i
done mon_echo.sh

$ ./mon_echo.sh
$ ./mon_echo.sh toto titi tata
toto
titi
tata
$ ./mon_echo.sh "fin de » la demo
fin de
la
demo
$
27/10/2021 56

Imbrication de commandes

Pour récupérer le texte écrit sur le terminal par une commande


dans une chaîne de caractères
$(cmd)
Attention à ne pas confondre avec $cmd qui permet l’accès à la
valeur de la variable cmd
27/10/2021 57

Imbrication de commandes

Pour récupérer le texte écrit sur le terminal par une commande


dans une chaîne de caractères
$(cmd)
Attention à ne pas confondre avec $cmd qui permet l’accès à la
valeur de la variable cmd
$ date
lundi 11 octobre 2021, 02:42:08 (UTC+0200)
$
27/10/2021 58

Imbrication de commandes

Pour récupérer le texte écrit sur le terminal par une commande


dans une chaîne de caractères
$(cmd)
Attention à ne pas confondre avec $cmd qui permet l’accès à la
valeur de la variable cmd
$ date
lundi 11 octobre 2021, 02:42:08 (UTC+0200) Rappel : avec "…",
$ echo "Nous sommes le $(date). " seuls sont interprétés
Nous somme le lundi 11 octobre 2021, 02:44:38 les caractères $ \ `
(UTC+0200)
$
27/10/2021 59

Imbrication de commandes

Pour récupérer le texte écrit sur le terminal par une commande


dans une chaîne de caractères
$(cmd)
Attention à ne pas confondre avec $cmd qui permet l’accès à la
valeur de la variable cmd
$ date
lundi 11 octobre 2021, 02:42:08 (UTC+0200)
$ echo "Nous sommes le $(date). "
Nous somme le lundi 11 octobre 2021, 02:44:38
(UTC+0200)
$ echo "Nous sommes le $date."
Nous sommes le .
Attention on récupère la variable date et
non le résultat de la commande date
27/10/2021 60

Conclusion langage bash

Concepts clés

• Terminal, shell
• Interpréteur de commande bash
• Commandes, langage bash
• Documentation
• Caractères spéciaux de bash
• Script bash

Commandes clés

• man, bash, echo, read

Commandes à connaître

• date

Vous aimerez peut-être aussi