Après une petite leçon d'histoire si on se faisait des mathématiques... en bash ?! Oh rien de bien méchant : un peu d'arithmétique élémentaire (soustraction, addition, multiplication et division).

Comme d'habitude nous allons voir différentes méthodes ; n'hésitez pas à apporter votre eau au moulin si vous avez d'autres techniques.


Pour commencer nous allons voir expr qui est un petit programme prenant en arguments opérande_1, opérateur et opérande_2 (attention à bien les sépararer par des espaces puisque ce sont des arguments) :

expr 12 + 3
... donne
15
L'affecter à une variable se fait avec des backquotes "`" :
total=`expr 12 + 3`
On peut donc facilement utiliser cette syntaxe si l'on souhaite créer des compteurs dans des boucles par exemple :
i=11
while [ $i -ne 0 ]; do
    i=`expr $i - 1`
    echo $i
done
Et voilà un compte à rebours de 10 à 0 (on part avec une valeur à 11 et tant qu'elle est différente de 0 on la décrémente de 1 et on l'affiche)...
10
9
8
7
6
5
4
3
2
1
0
Utiliser expr est donc simple pour les opérations basiques. Cette solution se relève cependant contraignante lorsque l'on fait des division ; en effet le programme retourne systématiquement la partie entière (le résultat n'est donc jamais donné en virgule flottante).

Une autre méthode pour faire des maths en bash (et qui pallie ce dernier problème) consiste à utiliser bc et tant qu'à faire l'utiliser avec gestion de la virgule flottante (bc -l).
bc est un programme qui attend un fichier en argument ou qui s'utilise en mode interactif sinon. Pour le scripter (ce qui nous intéresse aujourd'hui) il suffit d'utiliser son entrée standard :
echo 15 / 2 | bc -l
... donne
7.50000000000000000000
... là où expr ou bc en mode normal auraient renvoyé "7"
De la même manière que précédemment, il est possible d'affecter ce résultat et de l'utiliser dans des scripts :
total=`echo 15 / 2 | bc -l`

Enfin la dernière méthode consiste à utiliser directement les spécificité de bash avec les doubles paranthèses " (( ... )) ". Ici on ne peut s'en servir que pour affecter des variables.
2 manières de faire :
total=$(( 5 * 3 ))
ou
(( total = 5 * 3 ))
Dans un cas comme dans l'autre si l'on affiche le contenu de la variable...
echo $total
... on obtient bien :
15
Tag(s) : #bash

Partager cet article

Repost 0
Pour être informé des derniers articles, inscrivez vous :