Commit 05295473 authored by Quentin Duchemin's avatar Quentin Duchemin

Version H20

parent fb1eab9f
Pipeline #54410 failed with stages
in 6 minutes and 21 seconds
......@@ -44,7 +44,7 @@ pdfproducer={Latex},
\author[R. Huet, Q. Duchemin]{%
\phantom{x}\hfill Rémy {\sc Huet} \hfill Quentin {\sc Duchemin} \hfill\phantom{x}}
\institute[Picasoft]{Association Picasoft}
\date[24/01/2019]{Mercredi 23 janvier 2018}
\date[29/01/2010]{Mercredi 29 janvier 2020}
\usetheme{AnnArbor}
\usecolortheme{crane}
......@@ -75,7 +75,7 @@ pdfproducer={Latex},
\titlepage
\end{frame}
\section{Introduction}
\section{Rappels}
\input{src/tex/introduction.tex}
\section{Les variables}
......
\subsection{Généralités}
\begin{frame}{Introduction}
\begin{block}{Mise en contexte}
On sait désormais effectuer des actions diverses, et ce en fonction de paramètres donnés au programme par l'utilisateur.
Maintenant, comment faire si l'on veut effectuer la même opération un certain nombre de fois?
\end{block} \Pause
\begin{beamercolorbox}[rounded=true]{orangebox}
\enquote{Facile, on les copie colle autant de fois qu'on veut dans le script!}
\end{beamercolorbox} \Pause
\begin{block}{}
Non, non, non et re-NON! C'est une très mauvaise pratique, car cela rend le script:
\begin{itemize}
\item Plus lourd
\item Illisible
\item Statique (le nombre d'exécutions est fixé et ne peut pas dépendre de paramètres extérieurs)
\end{itemize}
C'est pourquoi on utilise des \textbf{boucles}.
\end{block}
\end{frame}
\begin{frame}{Les boucles en théorie}
\begin{block}{Définition}
\begin{block}{Définition}
Une boucle est une structure permettant de répéter un ensemble d'instructions.
Elle est composée:
\begin{itemize}
\item D'un corps: c'est l'ensemble des instructions qui seront exécutées lors d'un passage dans la boucle.
\item D'une condition de réalisation: si celle-ci est vraie, une \textbf{itération} est effectuée.
\item D'une condition de réalisation: si celle-ci est vraie, une \textbf{itération} est effectuée. Si la condition est toujours vraie, on crée une boucle\ldots infinie.
\end{itemize}
\end{block}
\begin{alertblock}{N.B.}
La condition peut correspondre à n'importe laquelle des conditions vues précédemment.
Elle peut ne jamais être fausse. On parlera alors de \textbf{boucle infinie}.
\textit{Par exemple, 1 -eq 1 engendrera une boucle infinie}
\end{alertblock}
\end{block}
\end{frame}
\subsection{La boucle tant que~\ldots faire}
......@@ -78,7 +53,7 @@
\begin{Verbatim}
#!/bin/bash
while [ -z $reponse ] || [ "$reponse" != 'oui' ]\textcolor{red}{ # ou juste [ "$reponse" != oui ]}
while [ "$reponse" != 'oui' ]\textcolor{red}
do
read -p "Dites oui : " reponse
done
......
......@@ -15,10 +15,6 @@
{\large FIN_SI}
\end{Verbatim}
\begin{alertblock}{}
On retrouvera {\bf toujours} une ou plusieurs conditions et une ou plusieurs actions à effectuer.
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Et en Bash ?}
......@@ -181,7 +177,7 @@ elif [ "$1" == "password" ]
then
echo 'Welcome !'
else
echo 'Dégage !'
echo 'Raté !'
fi
if [ -z $2 ]
......@@ -199,7 +195,7 @@ fi
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
remy@hp-remy:~/scripts$ ./script.sh \Pause
Dégage !
Raté !
Il n'y a pas de second argument \Pause
remy@hp-remy:~/scripts$ ./script.sh mot_de_passe \Pause
Bienvenue
......@@ -209,13 +205,7 @@ Welcome !
\end{Verbatim}
\end{beamercolorbox}
\medskip
\begin{alertblock}{}
\begin{itemize}
\item C'est une bonne pratique de mettre des double quotes autour des variables lors des tests, avec \texttt{==} ou \texttt{!=}, en particulier si la valeur de la variable contient des espaces !
\item On peut éventuellement faire le test d'égalité avec un seul signe \texttt{=}.
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Nombres}{Les différents tests}
......@@ -477,7 +467,7 @@ case $extension_ficher in
echo ``C'est un fichier LaTeX \!''
;;
'.doc' | '.xls' | '.ppt')
echo 'Ouste !!!'
echo 'Sans déconner ?'
;;
*)
echo 'Je ne connais pas !'
......@@ -518,7 +508,7 @@ case $exension_fichier in
\vspace{-10pt}
\begin{Verbatim}
'.doc' | '.xls' | '.ppt')
echo 'Houste !!!'
echo 'Sans déconner ?'
;;
\end{Verbatim}
\vspace{-5pt}
......
\begin{frame}
\frametitle{Qu'est ce qu'un shell ?}
\begin{itemize}
\item Un shell est un {\bf interpréteur de commande}.
\item C'est le programme qui gère l'{\bf invite de commande}.
\item C'est donc lui qui a executé toutes les commandes que vous avez pu taper ces derniers jours.
\item Un shell est un {\bf interpréteur de commandes}.
\item C'est le programme qui gère l'{\bf invité de commandes}.
\item C'est donc lui qui a exécuté toutes les commandes que vous avez pu taper ces derniers jours.
\end{itemize}
\end{frame}
......@@ -15,25 +15,24 @@
{\bf sh} ou {\it Bourne Shell} est un des shells les plus anciens (1977). Il est sur tous les OS basés sur UNIX, mais est le plus pauvre en terme de fonctionnalités. Il a notamment introduit les \textit{pipes}.
\end{block}
\begin{block}{Bash}
{\bf Bash} ou {\it Bourne Again Shell} est une amélioration de sh. Il est le shell par défaut de la plupart des distributions Linux et des terminaux Mac OS.
{\bf Bash} ou {\it Bourne Again Shell} est une amélioration de sh. Il est le shell par défaut de la plupart des distributions Linux et des terminaux Mac OS (et celui que vous utilisez!).
\end{block}
\begin{block}{Mais aussi}
Il existe d'autres shells dérivant de sh : csh, tcsh, ksh, zsh\ldots
Il existe d'autres shells dérivant de sh : csh, tcsh, ksh, zsh, ainsi que d'autres shell complètement différents (xonsh\ldots).
\end{block}
\end{frame}
\begin{frame}
\frametitle{Les différents shells}
\framesubtitle{Évolution}
\begin{figure}[h]
\centering
\input{src/tizk/historique.tex}
\caption{Historique des shells}
\label{fig:historique}
\end{figure}
\end{frame}
%\begin{frame}
% \frametitle{Les différents shells}
% \framesubtitle{Évolution}
%
% \begin{figure}[h]
% \centering
% \input{src/tizk/historique.tex}
% \caption{Historique des shells}
% \label{fig:historique}
% \end{figure}
%\end{frame}
\begin{frame}[fragile]
\frametitle{Les différents shells}
......
......@@ -122,6 +122,9 @@ helloWorld.sh script.sh
\item[\bf Ligne 3] L'utilisation de backquotes interprète \verb+$cmd+ comme une commande et execute donc le \texttt{ls} depuis le répertoire de lancement du script.
\end{description}
\end{block}
\begin{alertblock}{Quelle forme utiliser pour les variables ?}
On préférera utiliser des double quotes (\verb+"+) quand on veut utiliser le contenu des variables, surtout si le contenu peut contenir des espaces!
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Entrées utilisateur}
......@@ -202,7 +205,7 @@ remy@hp-remy:~/scripts$ ./script.sh \Pause
\begin{frame}[fragile]{Les paramètres d'exécution}
\begin{block}{Contexte}
On a vu cette semaine qu'une commande peut recevoir un ou plusieurs paramètres (exemple : \texttt{mv <source> <destination>}). Il en est de même pour les scripts Bash.
On a vu cette semaine qu'une commande peut recevoir un ou plusieurs paramètres, séparés par des espaces (exemple : \texttt{mv <source> <destination>}). Il en est de même pour les scripts Shell.
Comme pour les commandes, l'ordre des paramètres est {\bf primordial} !
\end{block}
......@@ -244,7 +247,7 @@ Le premier paramètre est \Pause
\medskip
\begin{block}{}
Non, on peut en fait avoir plus de paramètres.
Non, on peut en fait avoir plus de paramètres, bien qu'en général on utilise plutôt des fichiers de configuration quand le nombre de paramètres explose.
On en reparlera quand on saura utiliser les boucles, pour faire ça \textit{proprement}.
\end{block}
\end{frame}
......@@ -253,23 +256,42 @@ Le premier paramètre est \Pause
\begin{block}{Contexte}
En Bash, on peut également déclarer des tableaux. Ce sont des variables un peu spéciales, qui contiennent plusieurs valeurs référencées par un {\bf index}.
\end{block}
\begin{block}{Déclarer un tableau}
Pour déclarer un tableau, on utilise la syntaxe \texttt{nom=(val0 val1 val3)}\\
{\tiny On peut évidement mettre plus de 3 valeurs.}
\end{block}
\begin{block}{Accéder à une valeur}
Les valeurs stockées dans un tableau possèdent un \textbf{index} qui permet d'y accéder individuellement. Cet index \textbf{commence à 0}.
La syntaxe pour lire une valeur est \verb+${nom[index]}+. On peut également utiliser \verb+${nom[*]}+ pour afficher toutes les valeurs associées à un index numérique.
Les valeurs stockées dans un tableau possèdent un \textbf{index} qui permet d'y accéder individuellement.
La syntaxe pour lire une valeur est \verb+${nom[index]}+. On peut également utiliser \verb+${nom[@]}+ pour afficher toutes les valeurs associées à un index \textbf{numérique}.
\end{block}
\begin{block}{Différents types de tableaux}
\begin{itemize}
\item Les tableaux \textbf{numériques}, où les indices sont des nombres,
\item Les tableaux \textbf{associatifs}, où les indices sont des mots arbitraires.
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]{Les tableaux}{Tableau numérique}
\begin{block}{Créer un tableau numérique}
On utilise la syntaxe \verb+tab=(el0 el1 el2)+. Dans cet exemple, le tableau contient trois éléments, accessibles aux indices \textbf{0}, 1 et 2. On peut par exemple accéder au premier élément avec \verb+$tab[0]+.
\end{block}
\begin{block}{Modifier une valeur}
La syntaxe \texttt{tab[index]} permet également de modifier une valeur, par exemple en écrivant \verb+nom[index]=valeur+.
\end{block}
\begin{exampleblock}{Ajouter ou supprimer une valeur}
On peut ajouter une valeur en utilisant la syntaxe précédente, par exemple : \verb+tab[3]=el3+. Le plus pratique reste d'utiliser la syntaxe \verb|tab+=(el3 el4 el5)|, qui prend automatiquement les bons indices.
Pour supprimer une valeur, on utilisera la syntaxe \verb+unset tab[index]+.
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]{Les tableaux}{Modifier un tableau}
\begin{block}{Ajouter ou modifier une valeur}
La syntaxe \texttt{nom[index]} permet également d'ajouter ou de modifier une valeur.
On peut alors créer la valeur correspondante, ou modifier celle déjà présente, en écrivant \verb+nom[index]=valeur+
\begin{frame}[fragile]{Les tableaux}{Tableau associatif}
\begin{block}{Créer un tableau associatif}
On utilise la syntaxe \verb+declare -A tab+.
\end{block}
\begin{exampleblock}{Quel genre d'index ?}
Les index ne sont pas forcément une valeur numérique (de toute façon, Bash ne fait pas la distinction). Ils le seront uniquement dans le cas où on déclare le tableau avec \texttt{nom=(val val)}. Sinon, on peut mettre \textbf{ce qu'on veut}, par exemple un mot !
\begin{block}{Opérations classiques}
On utilise la même syntaxe que pour les tableaux numériques, excepté pour ajouter plusieurs éléments d'un seul coup avec le \verb|+=|.
Et cette fois ci, les indices peuvent être des mots, ce qui est très pratique pour stocker des scores, des clé-valeurs\ldots
\end{block}
\begin{exampleblock}{Remarque}
Il est théoriquement possible de mélanger tableau numérique et tableau associatif, mais franchement, c'est une mauvaise idée\ldots
\end{exampleblock}
\end{frame}
......@@ -278,26 +300,29 @@ Le premier paramètre est \Pause
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
#!/bin/bash
mon_tableau=(toto titi)
echo $\{mon_tableau[0]\} $\{mon_tableau[1]\}
echo $\{mon_tableau[*]\}
mon_tableau[mon_index]=tata
echo $\{mon_tableau[mon_index]\}
mon_tableau[0]=tutu
echo $\{mon_tableau[*]\}
tab_num=( e0 e1 )
echo \${tab_num[0]}
echo \${tab_num[@]}
unset tab_num[0]
echo \${tab_num[*]}
declare -A tab_ass
tab_ass[foo]=jury
tab_ass[bar]=bc01
echo \${tab_ass[foo]}
echo \${tab_ass[@]}
\end{Verbatim}
\end{beamercolorbox}
On exécute, et on obtient:
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-7pt}
\begin{Verbatim}
toto titi
toto titi
tata
tutu titi
e0
e0 e1
e1
jury
jury bc01
\end{Verbatim}
\end{beamercolorbox}
\begin{exampleblock}{Remarque}
On remarque qu'il y a bien une valeur dans \verb+mon_tableau[mon_index]+ mais qu'on ne la récupère pas en utilisant le joker \texttt{*}.
\end{exampleblock}
\end{frame}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment