159 lines
7.5 KiB
Markdown
159 lines
7.5 KiB
Markdown
Title: Introduction a bash en tant que language de programmation.
|
||
Date: 2012-09-08 18:15
|
||
Author: Wxcafe
|
||
Category: Programmation
|
||
Slug: introduction-a-bash-en-tant-que-language-de-programmation
|
||
|
||
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...).
|
||
|
||
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.
|
||
|
||
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.)
|
||
|
||
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.
|
||
|
||
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:
|
||
|
||
#!/bin/bash
|
||
# La ligne du dessus est très importante, c'est elle qui dit a bash quel doit être
|
||
# l'interpreteur des commandes écrites dans ce script. Ici, on dit a bash d'interpréter
|
||
# lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire
|
||
# executer du python, par exemple, en mettant #!/usr/bin/python a la place.
|
||
echo "this is a test of bash as a simple script manager" # echo est une commande d'affichage de message.
|
||
echo "what's your name, user?"
|
||
read your_name # la commande read permet de demander a l'utilisateur de donner une
|
||
# information, stockée dans la variable en paramètre.
|
||
echo $your_name "is your name" # echo permet aussi d'afficher la valeur de variables.
|
||
# Ici, on renvoie la variable remplie précédemment, suivie d'un message.
|
||
exit # cet appel a exit n'est pas obligatoire, mais donne un aspect plus
|
||
# propre au code. Il ne quittera pas la session de terminal, cependant.
|
||
|
||
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:
|
||
|
||
#!/bin/bash
|
||
echo "welcome to this second bash program. would you please kindly enter the name of the machine you're running this on?"
|
||
read host_name
|
||
if [ $host_name == $HOSTNAME ] ## 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.
|
||
then echo "you told the truth!"
|
||
fi ## le fi est la commande fermant le if, tout comme le EndIf en basic. C'est un peu vieillot, mais important en bash.
|
||
if [ $host_name != $HOSTNAME ] ## l'opérateur != est l'inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes.
|
||
then echo "you lied!"
|
||
fi
|
||
exit
|
||
|
||
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.
|
||
|
||
Passons maintenant au while:
|
||
|
||
#!/bin/bash
|
||
echo "what is your name?"
|
||
read name
|
||
while [ 1 < 10 ] ## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.
|
||
do echo "i love" $name
|
||
done
|
||
exit
|
||
|
||
Ce petit programme permet d'observer les bases de while (qui est la
|
||
boucle de base en bash).
|
||
|
||
Le troisième opérateur de bash est case. Voyons:
|
||
|
||
#!/bin/bash
|
||
echo "please enter a number between one and five"
|
||
read number
|
||
case $number in
|
||
1)
|
||
echo "the choosen number was one"
|
||
;;
|
||
2)
|
||
echo "the choosen number was two"
|
||
;;
|
||
3)
|
||
echo "the choosen number was three"
|
||
;;
|
||
4)
|
||
echo "the choosen number was four"
|
||
;;
|
||
5)
|
||
echo "the choosen number was five"
|
||
;;
|
||
*)
|
||
echo "this number is not correct"
|
||
;;
|
||
esac
|
||
exit
|
||
|
||
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.
|
||
(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.
|
||
|
||
Quelques notions manquent ici:
|
||
- 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.
|
||
- 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.
|
||
être utilisées dans un programme bash.
|
||
- 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.
|
||
|
||
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.
|
||
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.
|
||
|
||
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)
|