Le shell bash - Télécom SudParis · 2018-09-17 · Dans la suite du cours, nous utiliserons...

Post on 28-May-2020

2 views 0 download

Transcript of Le shell bash - Télécom SudParis · 2018-09-17 · Dans la suite du cours, nous utiliserons...

CSC 3102

Le shell bash

CSC3102 - Introduction aux systèmes d’exploitation Élisabeth Brunet et Gaël Thomas

CSC 3102

 Terminal et shell

 Le langage bash

 Les variables

 Les structures algorithmiques

 Arguments d’une commande

 Commandes imbriquées

Le shell bash 2

CSC 3102

Le terminal

 Porte d’entrée d’un ordinateur

 Un terminal offre : •  un canal pour entrer des données (clavier, souris, écran tactile…) •  un canal pour afficher des données (écran, imprimante, haut-

parleur…) Le shell bash 3

CSC 3102

Le terminal

Un ordinateur n’a pas toujours un terminal intégré

Bien que ce soit souvent le cas (smartphone, tablette, ordinateur portable…)

Le shell bash 4

CSC 3102

Un terminal peut être virtualisé

Le shell bash 5

Terminaux virtuels

 Un terminal virtuel émule le comportement d’un terminal physique dans un autre terminal (virtuel ou physique)

CSC 3102

Un processus communique avec l’utilisateur via un terminal  On dit que le processus est attaché à un (et un seul) terminal

Le shell bash 6

Processus Utilisateur

(humain ou processus)

Terminal d’attache du processus

Canal d’entrée

Canal de sortie

Remarque : lorsqu’un terminal est fermé, tous les processus attachés au terminal sont détruits

CSC 3102

Le shell

Le shell est un programme permettant d’interagir avec les services fournis par un système d’exploitation

Le shell bash 7

Shell en mode graphique (Bureau windows, X-windows…)

Shell en mode texte (bash, tcsh, zsh, ksh, cmd.exe…)

CSC 3102

 Terminal et shell

 Le langage bash

 Les variables

 Les structures algorithmiques

 Arguments d’une commande

 Commandes imbriquées

Le shell bash 8

CSC 3102

Le Bourne-Again Shell (bash)

 Dans ce cours, nous étudions le shell en mode texte bash En mode texte car permet d’écrire des scripts !

 Attaché à un terminal virtuel en mode texte

Le shell bash 9

CSC 3102

Remarque importante

Dans la suite du cours, nous utiliserons souvent le terme « shell » pour désigner le « Bourne-Again shell »

Mais n’oubliez pas que bash n’est qu’un shell parmi de nombreux autres shells (bash, tcsh, zsh, ksh, cmd.exe…)

Le shell bash 10

CSC 3102

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 •  Structures algorithmiques classiques

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

 Accès rapide aux mécanismes offert par le noyau du système d’exploitation (tube, fichiers, redirections, …)

Le shell bash 11

CSC 3102

Un texte bash

 Un texte est 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

bash est sensible à la casse (c.-à-d., minuscule ≠ majuscule)

Le shell bash 12

CSC 3102

Un texte bash

 Un texte est formé de mots

Le shell bash 13

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

CSC 3102

Un texte bash

 Un texte est formé de mots

Le shell bash 14

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

CSC 3102

Invocation d’une commande bash

 Invocation d’une commande : var1=val1 var2=val2… 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…

Le shell bash 15

$

CSC 3102

Invocation d’une commande bash

 Invocation d’une commande : var1=val1 var2=val2… 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…

Le shell bash 16

$ echo Salut tout le monde

CSC 3102

Invocation d’une commande bash

 Invocation d’une commande : var1=val1 var2=val2… 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…

Le shell bash 17

$ echo Salut tout le monde

CSC 3102

Invocation d’une commande bash

 Invocation d’une commande : var1=val1 var2=val2… 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…

Le shell bash 18

$ echo Salut tout le monde Salut tout le monde

CSC 3102

Invocation d’une commande bash

 Invocation d’une commande : var1=val1 var2=val2… 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…

Le shell bash 19

$ echo "Salut tout le monde"

CSC 3102

Invocation d’une commande bash

 Invocation d’une commande : var1=val1 var2=val2… 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…

Le shell bash 20

$ echo "Salut tout le monde"

CSC 3102

Invocation d’une commande bash

 Invocation d’une commande : var1=val1 var2=val2… 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…

Le shell bash 21

$ echo "Salut tout le monde" Salut tout le monde

CSC 3102

La première commande à connaître

 man 1 cmd •  man pour manuel : donne de l’aide •  1 (optionnel) indique la section d’aide de la commande

– 1 : commandes •  cmd est la commande dont on veut consulter le manuel

Le shell bash 22

$ man ls

CSC 3102

La première commande à connaître

 man 1 cmd •  man pour manuel : donne de l’aide •  1 (optionnel) indique la section d’aide de la commande

– 1 : commandes •  cmd est la commande dont on veut consulter le manuel

Le shell bash 23

CSC 3102

Caractères spéciaux de bash

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

(' est appelé quote ou apostrophe alors que ` est appelé antiquote ou accent grave)

•  Explication de chacun donnée dans la suite du cours

 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)

Le shell bash 24

CSC 3102

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, mais pas word !) •  Un programme bash doit être rendu exécutable avec :

chmod u+x mon_script.sh (notion vue dans le CI2 sur le système de fichiers)

•  Par convention, les noms de script sont suffixés par l’extension « .sh » – p. ex., mon_script.sh

 Invocation du script nommé mon_script.sh avec •  ./mon_script.sh •  Avec ses arguments :

./mon_script.sh arg1 arg2

Le shell bash 25

./ indique que le script se trouve dans le répertoire courant (notion vue dans le CI2)

CSC 3102

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

 Puis séquence structurée de commandes shell

 Sortie implicite du script à la fin du fichier •  Sortie explicite avec la commande exit

Le shell bash 26

#! /bin/bash

commande1 commande2 … mon_script.sh

CSC 3102

 Terminal et shell

 Le langage bash

 Les variables

 Les structures algorithmiques

 Arguments d’une commande

 Commandes imbriquées

Le shell bash 27

CSC 3102

Variables bash

 Déclaration/affectation avec = (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

Le shell bash 28

CSC 3102

Variables bash

 Déclaration/affectation avec = : ma_var=valeur

 Consultation en préfixant du caractère $ : $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

Le shell bash 29

CSC 3102

Variables bash - exemple

30 Le shell bash

$

CSC 3102

Variables bash - exemple

31 Le shell bash

$ a=42 $

CSC 3102

Variables bash - exemple

32 Le shell bash

$ a=42 $ echo $a 42 $

CSC 3102

Variables bash - exemple

33 Le shell bash

$ a=42 $ echo $a 42 $ s='Bonjour, monde!!!' $

CSC 3102

Variables bash - exemple

34 Le shell bash

$ a=42 $ echo $a 42 $ s='Bonjour, monde!!!' $ echo $s Bonjour, monde!!! $

CSC 3102

Variables bash - exemple

35 Le shell bash

$ a=42 $ echo $a 42 $ s='Bonjour, monde!!!' $ echo $s Bonjour, monde!!! $ read x Ceci est une phrase $

Saisi par l’utilisateur

CSC 3102

Variables bash - exemple

36 Le shell bash

$ a=42 $ echo $a 42 $ s='Bonjour, monde!!!' $ echo $s Bonjour, monde!!! $ read x Ceci est une phrase $ echo $x Ceci est une phrase $

CSC 3102

Variables bash - exemple

37 Le shell bash

$ a=42 $ echo $a 42 $ s='Bonjour, monde!!!' $ echo $s Bonjour, monde!!! $ read x Ceci est une phrase $ echo $x Ceci est une phrase $ read x y Ceci est une phrase $

Saisi par l’utilisateur

CSC 3102

Variables bash - exemple

38 Le shell bash

$ a=42 $ echo $a 42 $ s='Bonjour, monde!!!' $ echo $s Bonjour, monde!!! $ read x Ceci est une phrase $ echo $x Ceci est une phrase $ read x y Ceci est une phrase $ echo $x Ceci $

Premier mot

CSC 3102

Variables bash - exemple

39 Le shell bash

$ a=42 $ echo $a 42 $ s='Bonjour, monde!!!' $ echo $s Bonjour, monde!!! $ read x Ceci est une phrase $ echo $x Ceci est une phrase $ read x y Ceci est une phrase $ echo $x Ceci $ echo $y est une phrase

Premier mot

Tous les mots qui suivent

CSC 3102

 Terminal et shell

 Le langage bash

 Les variables

 Les structures algorithmiques

 Arguments d’une commande

 Commandes imbriquées

Le shell bash 40

CSC 3102

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

Le shell bash 41

CSC 3102

Schéma alternatif (if)

 Schéma alternatif simple •  Si alors … sinon ( si alors … sinon … ) •  elif et else sont optionnels

Le shell bash 42

if cond; then cmds elif cond; then cmds else cmds fi

CSC 3102

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

 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

Le shell bash 43

CSC 3102

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

 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

Le shell bash 44

CSC 3102

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 suit

Le shell bash 45

if [ $x -eq 42 ]; then echo coucou fi

if test $x -eq 42; then echo coucou fi

Équivaut à

CSC 3102

Schéma alternatif (if)

 Schéma alternatif simple •  Si alors … sinon ( si alors … sinon … ) •  elif et else sont optionnels

Le shell bash 46

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

if cond; then cmds elif cond; then cmds else cmds fi

CSC 3102

Schéma alternatif (case)

 Schéma alternatif simple •  Si alors … sinon ( si alors … sinon … ) •  elif et else sont optionnels

 Schéma alternatif multiple •  Si mot vaut motif1 …

Sinon si mot vaut motif2 … Sinon …

•  Motif : chaîne de caractères pouvant utiliser des méta-caractères (voir CI3)

•  * ) correspond au cas par défaut

Le shell bash 47

if cond; then cmds elif cond; then cmds else cmds fi

case mot in motif1) …;; motif2) …;; *) …;; esac

CSC 3102

Schéma alternatif (case)

 Schéma alternatif simple •  Si alors … sinon ( si alors … sinon … ) •  elif et else sont optionnels

 Schéma alternatif multiple •  Si mot vaut motif1 …

Sinon si mot vaut motif2 … Sinon …

•  Motif : chaîne de caractères pouvant utiliser des méta-caractères (voir CI3)

•  * ) correspond au cas par défaut

Le shell bash 48

if cond; then cmds elif cond; then cmds else cmds fi

case mot in motif1) …;; motif2) …;; *) …;; esac

res="fr" case $res in "fr") echo "Bonjour";; "it") echo "Ciao";; *) echo "Hello";; esac

CSC 3102

Schémas itératifs

 Boucles •  while

– Tant que … faire … – Mot clé break pour sortir de la boucle

Le shell bash 49

while cond; do cmds done

CSC 3102

Schémas itératifs

 Boucles •  while

– Tant que … faire … – Mot clé break pour sortir de la boucle

Le shell bash 50

while cond; do cmds done

x=10 while [ $x –ge 0 ]; do read x echo $x done

CSC 3102

Schémas itératifs

 Boucles •  while

– Tant que … faire … – Mot clé break pour sortir de la boucle

•  for – Pour chaque … dans … faire … – var correspond à la variable d’itération – liste : ensemble sur lequel var itère

Le shell bash 51

while <cond> ; do <cmds> done

while cond; do cmds done

x=10 while [ $x –ge 0 ]; do read x echo $x done

for var in liste; do cmds done

CSC 3102

Schémas itératifs

 Boucles •  while

– Tant que … faire … – Mot clé break pour sortir de la boucle

•  for – Pour chaque … dans … faire … – var correspond à la variable d’itération – liste : ensemble sur lequel var itère

Le shell bash 52

while <cond> ; do <cmds> done

for var in liste; do cmds done

while cond; do cmds done

for var in 1 2 3 4; do echo $var done

x=10 while [ $x –ge 0 ]; do read x echo $x done

CSC 3102

 Terminal et shell

 Le langage bash

 Les variables

 Les structures algorithmiques

 Arguments d’une commande

 Commandes imbriquées

Le shell bash 53

CSC 3102

Arguments d’une commande

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

•  "$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" …

•  shift : décale d’un cran la liste des paramètres

Le shell bash 54

mon_script.sh arg1 arg2 arg3 arg4 …

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

CSC 3102

Arguments d’une commande

55 Le shell bash

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

$

CSC 3102

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

Arguments d’une commande

56 Le shell bash

mon_echo.sh

$./mon_echo.sh $

CSC 3102

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

Arguments d’une commande

57 Le shell bash

mon_echo.sh

$./mon_echo.sh $./mon_echo.sh toto titi toto titi $

CSC 3102

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

Arguments d’une commande

58 Le shell bash

mon_echo.sh

$./mon_echo.sh $./mon_echo.sh toto titi toto titi $./mon_echo "fin de" la demo fin de la demo $

CSC 3102

 Terminal et shell

 Le langage bash

 Les variables

 Les structures algorithmiques

 Arguments d’une commande

 Commandes imbriquées

Le shell bash 59

CSC 3102

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

Le shell bash 60

CSC 3102

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

Le shell bash 61

$ date lundi 27 juillet 2015, 12:47:06 (UTC+0200) $

CSC 3102

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

Le shell bash 62

$ date lundi 27 juillet 2015, 12:47:06 (UTC+0200) $ echo "Nous sommes le $(date). " Nous sommes le lundi 27 juillet 2015, 12:47:06 (UTC+0200). $

CSC 3102

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

Le shell bash 63

$ date lundi 27 juillet 2015, 12:47:06 (UTC+0200) $ echo "Nous sommes le $(date). " Nous sommes le lundi 27 juillet 2015, 12:47:06 (UTC+0200). $ echo "Nous sommes le $date." Nous sommes le . $ Attention, récupère la variable date

et non le résultat de la commande date

CSC 3102

 Terminal et shell

 Le langage bash

 Les variables

 Les structures algorithmiques

 Arguments d’une commande

 Commandes imbriquées

Le shell bash 64

CSC 3102

Conclusion

 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

Le shell bash 65

CSC 3102

En route pour le TP !

66 Le shell bash