Bachotage arithmétique avec bash, levons la bâche !

Bachotage arithmétique avec bash, levons la bâche !
Extrait du Les nouvelles technologies pour l'enseignement des mathématiques
http://revue.sesamath.net/spip.php?article383
Bachotage arithmétique avec
bash, levons la bâche !
- N°29 - Mars 2012 -
Date de mise en ligne : dimanche 4 mars 2012
Description :
Le langage bash est peu connu parce qu'il ne connaît que les entiers, raison de plus pour faire de l'arithmétique avec !
Copyright © Les nouvelles technologies pour l'enseignement des
mathématiques - Tous droits réservés
Copyright © Les nouvelles technologies pour l'enseignement des mathématiques Page 1/16
Bachotage arithmétique avec bash, levons la bâche !
Le langage bash ne connaît que deux types de données : Les chaînes de caractères et les
entiers. Mais beaucoup de problèmes algorithmiques, et notamment d'arithmétique,
concernent les entiers. On peut donc utiliser bash pour tester des algorithmes sur des entiers.
Pour programmer en bash (Bourne-Again shell), on n'a rien à installer, puisque ce logiciel est la fondation des
systèmes d'exploitation basés sur UNIX, en particulier Linux. Ce langage de programmation n'est donc pas
totalement multi-plateforme puisque les windowsiens en sont privés [1], mais les heureux possesseurs d'un UNIX ont
déjà tout ce qu'il faut pour programmer en bash, il suffit pour cela qu'ils ouvrent une console et ça y est, ils
programment en bash [2] ! Ceci dit, pour des questions de confort (et de coloration syntaxique), le logiciel Geany a
été utilisé dans cet article.
D'où vient ce nom à bugger dehors ?
L'ancêtre de bash est le shell Unix de Stephen Bourne, ou Bourne shell (en abrégé sh comme shell, parce que c'est
un peu la coque qui entoure le système d'exploitation, du moins sa partie visible).
Lorsque le projet GNU a repris son shell à lui, il l'a baptisé Bourne Again Shell pour faire un jeu de mots sur Borne
again shell suggérant l'idée d'une renaissance. D'où le nom de bash.
Mais il existe d'autres logiciels reconnaissant les scripts ci-dessous, comme le Korn shell, Csh, Tcsh, Zsh ou le léger
Ash shell, ash signifiant cendre... C'est pour cela qu'il est nécessaire de préciser au début de chacun des scripts
ci-dessous le choix du shell qu'on a fait, en expliquant où est bash (ou autre) à la console. Ce qu'on fait en
commençant le script par une des lignes suivantes :
#! /bin/bash
#! /bin/sh
On remarquera que dans cet article, Guillaume Connan fait de même avec Python 3, en commençant un de ses
scripts par
#! python3
Ce n'est pas un hasard, puisque python3 est considéré comme une instruction de bash, comme le sont tous les
logiciels installés, en particulier Perl, Python, grep, cat, awk, cat etc.
Copyright © Les nouvelles technologies pour l'enseignement des mathématiques Page 2/16
Bachotage arithmétique avec bash, levons la bâche !
Pour programmer en bash avec Geany, on doit commencer par créer un document texte avec l'extension sh, puis le
rendre exécutable. Sous Ubuntu on peut faire un clic droit sur le fichier, et sélectionner l'option autoriser l'exécution
comme un programme :
Une fois que c'est fait, il suffit d'ouvrir le fichier avec Geany et pour tester chaque modification, on lance l'algorithme
en cliquant sur l'icône ressemblant à un rouage [3] :
Voici quelques exemples de scripts en bash, d'intérêt essentiellement mathématique :
Présentation
Affectation, entrée, sortie
Affectation
L'affectation se note classiquement par un signe d'égalité :
Copyright © Les nouvelles technologies pour l'enseignement des mathématiques Page 3/16
Bachotage arithmétique avec bash, levons la bâche !
a=3
Mais comme le type par défaut est la chaîne de caractères, tout appel à a va renvoyer la lettre a et non la variable a.
Pour accéder au contenu d'une variable, on précède son nom du symbole dollar [4]. En plus, si on veut incrémenter
un nombre entier a, le simple fait d'écrire
a=$a+1
ne marche pas, parce que dans ce cas a contiendra 3+1 et non 4 : Les opérations ne s'exécutent pas toutes seules !
Pour les forcer à s'exécuter, on les met elles-mêmes derrière le symbole dollar (avec des doubles parenthèses).
Pour incrémenter a, chacune des lignes de code suivantes convient :
a=$(($a+1))
let "a=$a+1"
let "a+=1"
let "a++"
Dans la suite de cet article, l'usage de let avec un script entre guillemets sera préféré (question de goût
essentiellement).
Les opérations sont notées comme en Python (langage) par les symboles suivants :
opération notation exemple
addition + 2+2=4
soustraction - 3-2=1
multiplication * 3*2=6
division euclidienne / 22/7=3
reste % 22%7=1
puissance ** 2**3=8
facteurs premiers factor 2012=2*2*503
Entrée de données
Pour entrer au clavier la valeur d'une variable x, on fait juste
read x
Sortie de données
Pour afficher le contenu d'une variable, on utilise echo (qui recopie le contenu de la variable dans la console, à moins
qu'on effectue une redirection pour écrire dans un fichier) :
echo x
écrit "x" dans la console, alors que
echo $x
Copyright © Les nouvelles technologies pour l'enseignement des mathématiques Page 4/16
Bachotage arithmétique avec bash, levons la bâche !
effectue la sortie désirée.
Voici, à titre d'exemple, un script qui permet de vérifier que la fonction $x \mapsto x^2-(x+1)(x-1)$ est constante :
Tests
Les tests s'écrivent entre crochets, et envoient un nombre entier (bash n'ayant pas de booléens), 0 si le test échoue, 1
s'il réussit. Les opérateurs booléens s'écrivent façon ligne de commande avec des tirets : -a (comme and) pour la
conjonction, et -o (comme or) pour la disjonction. Les opérateurs de comparaison s'écrivent comme des abréviations
anglaises, par exemple -lt (comme less than) pour inférieur, ou -eq (comme equal) pour l'égalité...
Un test s'écrit entre if et fi (if à l'envers) ; le mot else est utilisé pour gérer le cas où le test échoue.
Des exemples seront montrés dans les onglets suivants.
Boucles
à indice
L'instruction
seq 1 10
affiche la suite des entiers allant de 1 à 10, alors comme bash peut déléguer son travail (en envoyant des signaux par
des pipes), on peut effectuer des opérations répétitives en écrivant la séquence entre apostrophes à l'envers (caratère
Alt Gr+7) ; dans ce cas tout ce qui est entre do et done sera effectué. Par exemple, pour afficher les dix premiers
carrés, on peut faire ainsi :
à condition de sortie
Une boucle à condition de sortie s'écrit entre do et done comme pour la boucle for, mais cette fois-ci on l'écrit après
Copyright © Les nouvelles technologies pour l'enseignement des mathématiques Page 5/16
1 / 16 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !