Programmation Impérative Interpréteur Bash

publicité
Programmation Impérative 2 : Plan
Introduction
Programmation Impérative
Interpréteur Bash
Arborescence de fichiers
Ligne de commande
Le "shell" Bash
Automatisation et écriture de script
Boucles for
Besoin d'espaces
>_
Arborescence de fichiers
bash
6 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Chemins relatifs et chemins absolus
Chemin relatif
/
cr.txt : fichier cr.txt dans le dossier courant
tp1/cr.txt :
home
bob
films
fichier cr.txt dans le dossier tp1 lui même dans le dossier courant
big-lebowski.avi
the-cabin-in-the-woods.avi
zombieland.avi
music
album-1
track-1.mp3
track-3.mp3
track-2.mp3
track-4.mp3
.. : dossier parent du dossier courant
../../ : dossier parent du dossier parent du dossier courant
../../tp12 : tp12 dans le parent du parent du dossier courant
./tp1/ex3/programme.py
Chemin absolu
/home/bob : le dossier bob dans le dossier home , à la racine
/home/bob/prog-imp/tp1/ex3/programme.py
Règles
…
si le chemin commence par / il est absolu (à partir de la racine)
les parties sont séparées par /
. désigne le dossier courant
.. désigne le dossier parent
~ en début de chemin désigne la « maison » ( /home/bob )
7 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
8 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Programmation Impérative 2 : Plan
Ligne de commande
Introduction
Ce que fait un ordinateur (vu de loin)
Arborescence de fichiers
Ligne de commande
Le "shell" Bash
Automatisation et écriture de script
Boucles for
Besoin d'espaces
lancer des programmes,
stocker des données,
communiquer avec d'autres ordinateurs,
interagir avec nous.
Interaction graphique : Graphical User Interface (GUI)
Ligne de commande : Command Line Interface (CLI)
"Shell" : un programme qui en lance d'autres
Notion de "REPL"
Read : lecture au clavier de la commande
Execute : exécution de la commande
Print : affichage du résultat
Loop : boucle, retour à "Read"
Pourquoi le shell ?
excellent rapport actions/frappes-de-touche
permets d'automatiser des tâches répétitives
accès à distance
Défaut : textuel et un peu obscur au départ
>_
bash
14 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
15 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Programmation Impérative 2 : Plan
Introduction
Le plus utilisé des shells (aujourd'hui)
Arborescence de fichiers
Successeur de « sh » (1977)
Ligne de commande
Créé en 1989
Le "shell" Bash
Écrit en langage C
Automatisation et écriture de script
Standard
Boucles for
Exemples de commandes
externes : mkdir , ls , touch , echo , firefox , …
^ ce sont elles mêmes des programmes
internes : cd , pwd , history , bg , fg
Besoin d'espaces
>_
Bash : historique et vue globale
bash
16 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
17 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Bash : syntaxe
Analyse de Quelques Commandes
Syntaxe = comment il faut écrire les choses
Lancement d'un programme
nom-de-programme
nom-de-programme parametre
nom-de-programme parametre1 parametre2 parametre3
…
autant d'espace que l'on veut : prog param = prog param
nom-de-programme & (en fond de tâche)
Exemples
ls
ls -l
ls -l src
rm cr.txt
rm -r src
ls ../../tp2/ex2/src
wc -l programme.py ../cr.txt
man cp
Noms obscurs
raison historique : garder l'existant
objectif d'efficacité : taper moins, raccourcis
Utilisations de commandes de base
cp a.txt b : copie le fichier a.txt en tant que b
si b existe déjà, il est écrasé
si b existe déjà et est un dossier, un fichier b/a.txt est créé
cp a.txt b/ : copie le fichier a.txt en tant que b/a.txt
si b n'est pas un dossier existant, erreur
cp a.txt b.txt c : copie a.txt et b.txt dans le dossier c
mv a.txt b : comme cp mais déplace le fichier
echo bonjour : affiche le texte bonjour
echo bonjour bob : affiche le texte bonjour bob
echo bonjour bob : affiche le texte bonjour bob
wc fichier.txt : affiche les nombres de lignes, mots,
caractères du fichier
wc -l fichier.txt : affiche les nombres de lignes du fichier
18 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
20 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Documentation pour les commandes
Beaucoup à Apprendre des Docs :
Options/Alternatives Pratiques
Manuel avec la commande man (si man est installé)
man ls
cp --help
Option --help souvent disponible
ls --help
Utilisation : ls [OPTION]... [FILE]...
Affiche les informations à propos des FILE(s) (du répertoire actuel par défaut).
Trie les entrées alphabétiquement si aucune des options -cftuvSUX ou --sort
n'est utilisées.
Les arguments obligatoires pour les options longues le sont aussi pour les
options courtes.
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
--author
with -l, print the author of each file
-b, --escape
print C-style escapes for nongraphic characters
--block-size=SIZE
utilise des blocs de SIZE octets. Voir le format de
SIZE ci-dessous.
-B, --ignore-backups
n'inclut pas dans la liste, les entrées se
terminant par ~
-c
avec -lt, affiche et tri selon ctime (date de
dernière modification provenant des informations de
statut du fichier)
...
21 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Utilisation : cp [OPTION]... [-T] SOURCE DEST
ou : cp [OPTION]... SOURCE... DIRECTORY
ou : cp [OPTION]... --target-directory=DIRECTORY SOURCE...
Copie la SOURCE vers DEST, ou de multiples SOURCES vers DIRECTORY.
Les arguments obligatoires pour les options longues le sont aussi pour les
options courtes.
-a, --archive
identique à -dpR --preserve=all
--backup[=CONTROL]
archive chaque fichier de destination
-b
comme --backup mais n'accepte pas d'argument
--copy-contents
copie le contenu des fichiers spéciaux en mode
récursif
-d
identique à --no-dereference --preserve=links
-f, --force
si un fichier de destination existe et ne peut
être ouvert alors le supprime et essaie à
nouveau (redondant si l'option -n est utilisée)
-i, --interactive
demande confirmation avant d'écraser (surcharge
une précédente option -n)
-H
suit les liens symboliques de ligne de commande
dans SOURCE
-l, --link
lie les fichiers au lieu de les copier
-L, --dereference
toujours suivre les liens symboliques dans SOURCE
...
23 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Wildcards/joker en Bash + combinaisons
Variables
Joker de noms de fichiers : * et ?
ls
ls
ls
ls
Exemple de cas d'utilisation
*.txt ⇒ liste les fichiers (ou dossiers) en .txt
cours-* ⇒ ceux dont le nom commence par courst? ⇒ ceux dont le nom a deux lettres et commence par t
??? ⇒ ceux dont le nom a trois lettres
créer un dossier tp1 , puis y créer deux fichiers info.txt et
cr-tp1.txt
… on voudrait le refaire plus tard avec tp2
But : éviter de se répéter
Affectation de valeur à une variable
a=tp1 (la nouvelle valeur de a est le texte tp1 )
dossier=tp1 , f=toto.jpg , …
Important : * et ? interprétés par le shell
echo *.mp3 affiche la liste des fichiers mp3 (existants)
mv *.txt src/ déplace les fichiers .txt dans le dossier src
Utilisation de variables
mkdir $a ou mkdir ${a}
touch ${a}/info.txt (crée le fichier s'il n'existe pas)
touch ${a}/cr-${a}.txt
Remplacement dans une variable, ex
echo ${f} affiche toto.jpg
echo ${f%.jpg} affiche toto
echo ${f%.jpg}.txt affiche toto.txt
Quizz
cp *.txt
27 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
31 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Programmation Impérative 2 : Plan
Script Bash
Introduction
Script = petit programme
Arborescence de fichiers
Exemple
écriture du programme dans un fichier : creer-tp1.bash
exécution avec bash creer-tp.bash
Ligne de commande
un nouveau interpréteur bash est créé
cet interpréteur exécute le contenu du fichier en paramètre
Le "shell" Bash
la sortie du script est affichée dans le terminal
Automatisation et écriture de script
Exécution dans le répertoire courant
Boucles for
le nouveau bash s'exécute dans le dossier courant
(le script peut être ailleurs, par ex. bash ../creer-tp1.bash )
Besoin d'espaces
Exemples
>_
bash
33 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
34 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Paramètres de Scripts en Bash
Programmation Impérative 2 : Plan
But : pouvoir passer des paramètres à nos scripts
ex :
Introduction
Arborescence de fichiers
bash creer-tp.bash tp1
bash creer-tp.bash tp2
Ligne de commande
Accès aux paramètres
Le "shell" Bash
$1 (ou ${1} ) : premier paramètre
$2 (ou ${2} ) : second paramètre
…
$@ tous les paramètres (ex: echo $@ )
Automatisation et écriture de script
Boucles for
Exemple creer-tp.bash
1
2
3
4
mkdir $1
touch $1/info.txt
touch $1/cr-$1.txt
echo "À toi de jouer sur $1"
Besoin d'espaces
>_
bash
>_
35 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
bash
36 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Boucle for en Bash
Boucle for en Bash
But : répéter des commandes plusieurs fois
(Rappel) Exemples de combinaisons en bash
{b..y}
{1..4}
{3..6}
Exemple : comptine.bash
1
2
3
4
for fichier in *.txt
do
echo Il etait une fois un fichier, ${fichier}.
done
>_
bash
Autre exemple de for : compte-mal.bash
1
2
3
4
Lancement : bash comptine.bash
Il etait une fois un fichier, info.txt.
Il etait une fois un fichier, cr-tp1.txt.
>_
for i in {1..4} {6..10}
do
echo $i
done
Lancement : bash compte-mal.bash
1 2 3 4 6 7 8 9 10 (chacun sur une ligne)
37 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
38 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Défit
Espaces dans les paramètres
Transformer creer-tp.bash en creer-tps.bash qui
reçoit plusieurs paramètres et crée un dossier pour chaque
Paramètres séparés par des autant d'espaces que l'on veut
echo bonjour bob : affiche le texte bonjour bob
echo bonjour bob : affiche le texte bonjour bob
exemple : bash creer-tps.bash tp1 tp2
1
2
3
4
5
6
7
for d in $@
do
mkdir $d
touch $d/info.txt
touch $d/cr-$d.txt
done
echo "À toi de jouer sur $@"
>_
bash
Comment mettre des espaces dans un paramètre ?
guillemets doubles ou simples
echo
echo
echo
echo
echo
"bonjour
'bonjour
"bonjour
'bonjour
"bonjour
hello"
hello'
l'ami"
l'ami' ?
"bob"" ?
séquence d'échappement
echo "bonjour \"bob\"" ⇒ bonjour "bob"
echo 'bonjour l\"ami' ⇒ bonjour l\"ami
echo 'bonjour l\'ami' ⇒ ?
échappement uniquement dans les guillemets doubles
39 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
42 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
Être efficace avec le terminal et le shell
Points Clés
Autocomplétion et navigation
touche ↹ (tabulation)
flèches gauche/droite
Ctrl + a : début de ligne
Ctrl + e : fin de ligne
Historiques de commandes
Arborescence de fichier
chemin relatif et chemin absolu
.. , a/b/c/d/ , ~
Bash
dossier courant, pwd , cd , complétion avec ↹
appel de programmes/commandes
commandes existantes
paramètres de commande
manuel : man ls , ls --help
flèches haut/bas
commande history
Gestion des tâches
Ctrl + c : tuer la tâche courante
Ctrl + z : mettre la tâche courante en pause
fg : passer en premier plan la tâche actuellement en pause
bg : passer en arrière plan la tâche actuellement en pause
emacs & : lancement en arrière plan
Caractère de fin de fichier : Ctrl + d
44 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
variables : truc=tp1 puis ls $truc
boucle for pour répéter des choses
Script
fichier avec des commandes Bash
paramètres reçus : ${1} ${2}
tous les paramètres reçus : $@
45 / 45 − Rémi Emonet − Programmation Impérative Interpréteur Bash
>_
bash
bash
Téléchargement