198 lines
13 KiB
XML
198 lines
13 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Wxcafé</title><link>//wxcafe.net/</link><description></description><atom:link href="//wxcafe.net/feeds/feed.rss.programmation.xml" rel="self"></atom:link><lastBuildDate>Sat, 08 Sep 2012 18:15:00 +0200</lastBuildDate><item><title>Introduction a bash en tant que language de programmation.</title><link>//wxcafe.net/posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/</link><description><p>L’interpréteur de commandes bash (Bourne Again SHell)
|
||
est possiblement le shell le plus connu, notamment grâce a son
|
||
intégration en tant que shell par défaut dans les distributions Linux
|
||
les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva -
|
||
Mageia, etc...).</p>
|
||
<p>Cependant, il n'est souvent connu qu'en tant qu’interpréteur de
|
||
commande. Alors qu'en réalité, le bash est un langage de programmation
|
||
(presque) complet! Ainsi, il intègre les structures de contrôle
|
||
habituelles ( pour mémoire, les structures de contrôle comprennent les
|
||
conditions (les ifs), les boucles (les while), et les choix (les case),
|
||
entre autres.), et est donc ce que l'on pourrait appeler un langage de
|
||
script, interprété, de la même façon que python, a la difference près
|
||
qu'il contient un prompt (un système d'entrée de commande interactif)
|
||
bien plus complet et développé que python. </p>
|
||
<p>Cependant, les programmes en bash ne sont executables que dans un
|
||
environnement de type UNIX, et donc pas sous Windows (cygwin
|
||
(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous
|
||
windows. Il faut malgré tout convenir que cet environnement est bien
|
||
plus compliqué a manipuler, et globalement ne permet pas d'acceder a des
|
||
portages de qualité satisfaisante.)</p>
|
||
<p>Ainsi, il est possible de créer des fichiers .sh, contenant des
|
||
instructions bash mises a la suite (de la même façon qu'un script BATCH
|
||
Windows .bat), et faisant appel autant aux commandes internes de bash,
|
||
aussi bien que les commandes externes mises en place par les programmes
|
||
installés sur le système, exactement comme dans une invite de commande.
|
||
Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit
|
||
panda roux directement dans la boite magique, tandis qu'un if
|
||
[condition] suivi d'un then (quelque chose) lancera le fameux quelque
|
||
chose suscité si la condition est vérifiée. Un peu comme en C, quoi. </p>
|
||
<p>De cette façon, et avec quelques informations et connaissances, il est
|
||
facile de comprendre le fonctionnement de la programmation en bash.
|
||
Quelques exemples commentés:</p>
|
||
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span>
|
||
<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span>
|
||
<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span>
|
||
<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span>
|
||
<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span>
|
||
<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span>
|
||
<span class="c"># information, stockée dans la variable en paramètre. </span>
|
||
<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span>
|
||
<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span>
|
||
<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span>
|
||
<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span>
|
||
</pre></div>
|
||
</td></tr></table>
|
||
|
||
<p>Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite
|
||
d'être clair quand aux capacités et a la simplicité du bash en tant que
|
||
language de programmation. Alors en effet, nous n'avons ici absolument
|
||
pas utilisé les capacités de bash en lui même, et n'avons fait que le
|
||
renvoyer a des programmes externes (sauf read, il est vrai). Voyons
|
||
maintenant la syntaxe de bash quand il s'agit d'utiliser les structures
|
||
de contrôle:</p>
|
||
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span>
|
||
<span class="nb">read </span>host_name
|
||
<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## voici la syntaxe du if. Attention a bien penser a mettre les espaces avant la première variable, et après la seconde. La variable $HOSTNAME ici utilisée est une variable présente par défaut sur le système. </span>
|
||
<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span>
|
||
<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span>
|
||
<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span>
|
||
<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span>
|
||
<span class="k">fi </span>
|
||
<span class="nb">exit</span>
|
||
</pre></div>
|
||
</td></tr></table>
|
||
|
||
<p>Voila un petit programme permettant d'apprendre la syntaxe du if en
|
||
bash. comme vous pouvez le voir, le language est plutôt lite, et la
|
||
structure if n'est pas très difficile a prendre en main.</p>
|
||
<p>Passons maintenant au while:</p>
|
||
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
6
|
||
7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span>
|
||
<span class="nb">read </span>name
|
||
<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span>
|
||
<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span>
|
||
<span class="k">done</span>
|
||
<span class="nb">exit</span>
|
||
</pre></div>
|
||
</td></tr></table>
|
||
|
||
<p>Ce petit programme permet d'observer les bases de while (qui est la
|
||
boucle de base en bash).</p>
|
||
<p>Le troisième opérateur de bash est case. Voyons:</p>
|
||
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
6
|
||
7
|
||
8
|
||
9
|
||
10
|
||
11
|
||
12
|
||
13
|
||
14
|
||
15
|
||
16
|
||
17
|
||
18
|
||
19
|
||
20
|
||
21
|
||
22
|
||
23
|
||
24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span>
|
||
<span class="nb">read </span>number
|
||
<span class="k">case</span> <span class="nv">$number</span> in
|
||
1<span class="o">)</span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span>
|
||
;;
|
||
2<span class="o">)</span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span>
|
||
;;
|
||
3<span class="o">)</span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span>
|
||
;;
|
||
4<span class="o">)</span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span>
|
||
;;
|
||
5<span class="o">)</span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span>
|
||
;;
|
||
*<span class="o">)</span>
|
||
<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span>
|
||
;;
|
||
<span class="k">esac</span>
|
||
<span class="nb">exit</span>
|
||
</pre></div>
|
||
</td></tr></table>
|
||
|
||
<p>case est un opérateur plus complexe a utiliser a bon escient, et sert a
|
||
faire des ifs multiples sans avoir a taper des dizaines de lignes de
|
||
code.<br />
|
||
(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre
|
||
que le code vérifie chacune des conditions : le 1) est validé si la
|
||
valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc..
|
||
le *) désigne toutes les valeurs, et est donc validé si aucune autre
|
||
valeur n'a précédemment acceptée.</p>
|
||
<p>Quelques notions manquent ici:<br />
|
||
- les nombres aléatoires sont générés par un appel a la variable
|
||
\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a
|
||
16 bits donc). il est possible de faire des invocations a des nombres
|
||
aléatoires plus grands, mais les méthodes permettant de faire cela sont
|
||
plus complexes, et je ne les aborderai donc pas ici.<br />
|
||
- comme vous avez pu le constater, les variables sont désignées en tant
|
||
que telles par l'utilisation d'un symbole \$ au début de leur nom.
|
||
Ainsi, echo number renverra "number", tandis que echo \$number renverra
|
||
le résultat de la variable \$number.<br />
|
||
être utilisées dans un programme bash.<br />
|
||
- comme vous avez pu le constater, les commandes doivent tenir en
|
||
théorie en une ligne. Cependant, le caractère \ permet de retourner a
|
||
la ligne en faisant considérer a bash qu'il s'agit de la même ligne.</p>
|
||
<p>Globalement, il faut admettre que bash n'a pas vocation a être un
|
||
langage de programmation extrêmement développé. Sans framework
|
||
graphique, avec peu de manières d'utiliser de grandes variables, ou
|
||
encore une gestion de la mémoire risible, bash n'a rien d'un langage de
|
||
développement professionnel.<br />
|
||
Cependant, le simple fait qu'il soit considéré comme un langage de
|
||
programmation a part entière font de lui un langage de script d'une
|
||
puissance incontestable, et sa simplicité et sa grande popularité font
|
||
de lui un langage de choix pour apprendre la programmation simplement et
|
||
sans trop se prendre la tête.</p>
|
||
<p>J'espère que cet article aura été utile a certain-e-s, et je vous
|
||
souhaite bonne chance dans votre découverte de la programmation (n'allez
|
||
pas voir ceux qui font de l'orienté objet, c'est des méchants :3)</p></description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wxcafe</dc:creator><pubDate>Sat, 08 Sep 2012 18:15:00 +0200</pubDate><guid>tag:wxcafe.net,2012-09-08:posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/</guid></item></channel></rss> |