variables.tex 9.85 KB
Newer Older
1
2
3
4
5
6
\begin{frame}{Qu'est-ce qu'une variable?}
	\begin{block}{Définition}
		Une variable est une zone de mémoire dans laquelle on met une valeur.
		Concrètement, on ne s'occupera pas de la partie gestion de mémoire,
		on se limitera au couple clé/valeur.
	\end{block}
Rémy Huet's avatar
Rémy Huet committed
7

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
	\begin{block}{Pourquoi variable?}
		On appelle cela une variable, car la valeur associée à la clé peut changer au cours de l'execution du programme {\it on dit qu'on peut la réaffecter}
	\end{block}
\end{frame}

\begin{frame}[fragile]{Affecter une variable}
	\begin{block}{Affecter}
		{\bf Affecter} une valeur à une variable, c'est dire {\it \enquote{Quand j'appellerai cette variable, tu renverras cette valeur}}
	\end{block}
	\begin{block}{Syntaxe}
		Pour affecter une valeur à une vaiable, on utilisera la syntaxe :
		\begin{center}
			{\bf\large \textcolor{red}{nom}\textcolor{blue}{=}\textcolor{myGreen}{valeur}}
		\end{center}
	\end{block}
	\begin{alertblock}{{\bf Attention!}}
		Il ne faut surtout pas mettre d'espace avant et après le signe \texttt{=}
	\end{alertblock}
	Exemple:

	Dans le fichier \texttt{script.sh} on écrit :
	\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
		\begin{Verbatim}
#!/bin/bash
ma_variable='Salut tout le monde'
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}

\begin{frame}[fragile]{Affecter une variable}
	On execute le script :
	\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
		\begin{Verbatim}
remy@hp-remy:~/scripts$ chmod a+x script.sh
remy@hp-remy:~/scripts$ ./script.sh \Pause
		\end{Verbatim}
	\end{beamercolorbox}
	\begin{beamercolorbox}[rounded=true]{orangebox}
		\enquote{Attends, mais pourquoi y a rien qui s'affiche ?}
	\end{beamercolorbox} \Pause

	\begin{block}{Réponse}
Rémy Huet's avatar
Rémy Huet committed
50
51
		Parce que notre script ne fait qu'\textbf{affecter} une valeur à une variable!
		On ne lui a jamais rien demandé d'afficher !
52
	\end{block}
Rémy Huet's avatar
Rémy Huet committed
53
\end{frame}
Rémy Huet's avatar
Rémy Huet committed
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74

\begin{frame}[fragile]{Lire une variable}
	\begin{block}{Accéder au contenu}
		Pour accéder au contenu d'une variable, il faut écrire son \textcolor{red}{\bf nom}, précédé du symbole \textcolor{red}{\bf \$}
	\end{block}
	On modifie le fichier \texttt{script.sh} :
	\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
		\begin{Verbatim}
#!/bin/bash
ma_variable='Salut tout le monde'
echo $ma_variable
		\end{Verbatim}
	\end{beamercolorbox}
	En executant le script, on obtient :
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
		\begin{Verbatim}
remy@hp-remy:~/scripts$ ./script.sh \Pause
Salut tout le monde
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}
Rémy Huet's avatar
Quotes  
Rémy Huet committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114

\begin{frame}[fragile]{Les quotes}
	\begin{block}{Explications}
		Il y a trois types de \enquote{quotes} en bash:
		\begin{itemize}
			\item Les \enquote{simple quotes} (\texttt{'}) qui affichent le contenu tel qu'il est écrit
			\item Les \enquote{double quotes} (\texttt{``}) qui interprètent des variables ou des caractères d'échapement dans du texte
			\item Les \enquote{backquotes} (\texttt{`}) qui interprètent le contenu comme une commande
		\end{itemize}
	\end{block}
	On écrit dans \texttt{script.sh}
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
		\begin{Verbatim}
#!/bin/bash
cmd='ls'

echo '$cmd'
echo "$cmd"
echo `$cmd`
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}

\begin{frame}[fragile]
	Le résultat obtenu est :
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
		\begin{Verbatim}
$cmd
ls
script.sh
		\end{Verbatim}
	\end{beamercolorbox}
	\begin{block}{Explications}
		\begin{description}
			\item[\bf Première ligne] L'utilisation de simple quotes n'interprète pas \verb+$cmd+ comme une variable
			\item[\bf Deuxième ligne] L'utilisation de double quotes interprète \verb+$cmd+ comme une variable et affiche son contenu
			\item[\bf Troisième ligne] L'utilisation de backquotes interprète \verb+$cmd+ comme une commande et execute donc le \texttt{ls}
		\end{description}
	\end{block}
\end{frame}
Rémy Huet's avatar
Rémy Huet committed
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136

\begin{frame}[fragile]{Entrées utilisateur}
	\begin{block}{Contexte}
		L'intérêt des variables, c'est aussi de pouvoir demander à l'utilisateur de saisir des données pour rendre le programme {\bf interactif}
	\end{block}
	\begin{block}{Utilisation}
		Pour lire une entrée utilisateur, on utilise la commande
		\begin{center}
			\texttt{read \textcolor{red}{variable}}
		\end{center}

		L'option \texttt{-p} permet d'afficher un message dans le prompt.
		{\tiny\it RTFM pour plus de super options !}
	\end{block}
	Exemple (toujours dans \texttt{script.sh}) :
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
		\begin{Verbatim}
read -p 'Quel est votre nom ? ' nom
echo ``Salut $nom''
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}
Rémy Huet's avatar
Rémy Huet committed
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184

\begin{frame}[fragile]{Les opérations arithmétique}
	\begin{block}{Contexte}
		Bash ne gère pas nativement les variables comme des nombres (2+2 donnera une erreur). Il faut passer par la commande \texttt{let}
	\end{block}
	Exemple :
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
		\begin{Verbatim}
let ``a=5''
let ``b=2''
let ``c=a+b''
echo $c
		\end{Verbatim}
	\end{beamercolorbox}
	Quand on execute le script, on obtient :
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
		\begin{Verbatim}
remy@hp-remy:~/scripts$ ./script.sh \Pause
8
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}

\begin{frame}{Les opérateurs arithmétiques}
	Les opérateurs reconnus par \texttt{let} sont :
	\begin{table}
		\centering
		\begin{tabular}{|c|c|c|}
			\hline
			{\bf Symbole} & {\bf Signification} & {\bf Exemple} \\
			\hline\hline
			\texttt{+} & Addition & \texttt{5+2=7} \\
			\hline
			\texttt{-} & Soustraction & \texttt{5-2=3} \\
			\hline
			\texttt{*} & Multiplication & \texttt{5*2=10} \\
			\hline
			\texttt{/} & Division euclidienne & \texttt{5/2=2} \\
			\hline
			\texttt{**} & Puissance & \texttt{5**2=25} \\
			\hline
			\texttt{\%} & Modulo & \texttt{5\%2=1} \\
			\hline
		\end{tabular}
		\caption{Les opérateurs de let}
		\label{tab:operators}
	\end{table}
	\begin{exampleblock}{Info}
Rémy Huet's avatar
Rémy Huet committed
185
		Comme en c, il est possible d'utiliser la syntaxe \texttt{let ``a+=3''} à la place de \texttt{let ``a=a+3''} {\tiny\it (ou autres opérateurs)}
Rémy Huet's avatar
Rémy Huet committed
186
187
	\end{exampleblock}
\end{frame}
Rémy Huet's avatar
Rémy Huet committed
188
189
190

\begin{frame}[fragile]{Les paramètres d'execution}
	\begin{block}{Contexte}
Rémy Huet's avatar
Rémy Huet committed
191
		On a vu depuis les derniers jours 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.
Rémy Huet's avatar
Rémy Huet committed
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226

		Comme pour les commandes, l'ordre des paramètres est {\bf primordial}
	\end{block}
	\begin{block}{Accéder aux paramètres}
		Lors de l'exécution, des variables sont automatiquement créées : \texttt{\$\#} contient le nombre de paramètres, \texttt{\$1} le premier, \texttt{\$2} le deuxième \ldots \texttt{\$9} le neuvième
	\end{block}
	Exemple:
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
		\begin{Verbatim}
#!/bin/bash
echo ``Il y a $# paramètres d'execution''
echo ``Le premier paramètre est $1''
		\end{Verbatim}
	\end{beamercolorbox}
\end{frame}

\begin{frame}[fragile]
	Ce qui donnera:
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
		\begin{Verbatim}
remy@hp-remy:~/scripts$ ./script.sh test \Pause
Il y a 1 paramètres d'execution
Le premier paramètre est test \Pause
remy@hp-remy:~/scripts$ ./script.sh test toto \Pause
Il y a 2 paramètres d'execution
Le premier paramètre est test \Pause
remy@hp-remy:~/scripts$ ./script.sh \Pause
Il y a 0 paramètres d'execution
Le premier paramètre est \Pause
		\end{Verbatim}
	\end{beamercolorbox}
	\begin{beamercolorbox}[rounded=true]{orangebox}
		\enquote{Mais attends, je peux avoir que 9 paramètres ?}
	\end{beamercolorbox}
	\begin{block}{}
Rémy Huet's avatar
Rémy Huet committed
227
		Non, on peut en fait avoir plus de paramètres.
Rémy Huet's avatar
Rémy Huet committed
228
229
230
		On en reparlera quand on saura utiliser les boucles, pour faire ça proprement
	\end{block}
\end{frame}
Rémy Huet's avatar
Rémy Huet committed
231
232
233

\begin{frame}[fragile]{Les tableaux}{Créer et lire un tableau}
	\begin{block}{Contexte}
Rémy Huet's avatar
Rémy Huet committed
234
		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}
Rémy Huet's avatar
Rémy Huet committed
235
236
	\end{block}
	\begin{block}{Déclarer un tableau}
Rémy Huet's avatar
Rémy Huet committed
237
		Pour déclarer un tableau, on utilise la syntaxe \texttt{nom=(val0 val1 val3)} {\tiny\it (on peut évidement mettre plus de 3 valeurs)}
Rémy Huet's avatar
Rémy Huet committed
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
	\end{block}
	\begin{block}{Accéder à une valeur}
		Les valeurs stockées dans un tableau possèdent un \textbf{index} qui permet de les lire. 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 ayant un index numérique.
	\end{block}
\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+
	\end{block}
	\begin{exampleblock}{Quels 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}
	\end{exampleblock}
\end{frame}

\begin{frame}[fragile]{Les tableaux}{Exemple}
	On ecrit dans \texttt{script.sh} :
	\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[*]}
		\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
		\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 avec la syntaxe *
	\end{exampleblock}
\end{frame}