Générer un nombre aléatoire compris entre deux valeurs en Bash

Publié le 29 novembre 2009 par Lb01

Voici un petit bout de code bien pratique qui vous permet de générer un nombre aléatoire compris entre deux valeurs choisies.

Nous verrons aussi un exemple pratique d’utilisation avec la génération d’une date de naissance aléatoire !

Tout d’abord, voici le code en version longue qui va générer un nombre aléatoire compris entre 100 et 200 :

min=100
max=200
number=$[($RANDOM % ($[$max - $min] + 1)) + $min]
echo $number

Il peut aussi être écrit en version courte :

echo $[($RANDOM % ($[200 - 100] + 1)) + 100]

Voilà ! Rien de bien compliqué ici : la fonction $RANDOM native de BASH va générer un nombre pseudo aléatoire entre 0 et 32767 qui va ensuite être modifié par des opérations mathématiques pour donner notre nombre aléatoire !

Génération d’une date de naissance aléatoire

Voyons maintenant comment générer une date de naissance aléatoire grâce à notre petite formule.

Commençons par le plus facile, l’année et le mois. Il suffit de reprendre la formule présentée ci-dessus et d’y modifier les valeurs minimales et maximales :

yearMin=1900
yearMax=2008
year=$[($RANDOM % ($[$yearMax - $yearMin] + 1)) + $yearMin]
month=$[($RANDOM % ($[12 - 1] + 1)) + 1]

Et pour le jour alors ?

C’est déjà un peu plus compliqué, il faut connaître le dernier jour du mois (pour le max de notre formule) et il peut-être le 31, le 30, le 29 ou même le 28 !

Heureusement que, étant des lecteurs assidus de Tavuu.net, vous avez lu le dernier article intitulé « Trouver le dernier jour d’un mois en bash !« .

Il nous suffit donc de reprendre la formule présentée dans cet article et de l’adapter à notre code (tiens, c’est drôle, les variables correspondent déjà :-°) :

lastMonthDay=$(date -d "$year-$month-01 +1 month -1 day" +%d)

Il ne nous reste plus qu’à générer notre jour aléatoire :

day=$[($RANDOM % ($[$lastMonthDay - 1] + 1)) + 1]

Vous pouvez ensuite afficher votre date comme bon vous semble :

echo "$day/$month/$year"

Code final

Ce qui nous donne au final :

yearMin=1900
yearMax=2008
year=$[($RANDOM % ($[$yearMax - $yearMin] + 1)) + $yearMin]
month=$[($RANDOM % ($[12 - 1] + 1)) + 1]
day=$[($RANDOM % ($[$lastMonthDay - 1] + 1)) + 1]
echo "$day/$month/$year"

Source

  • http://www.somekindofpaper.info/articles/2009/10/18/random-number-with-bash-scripting.html
Similar Posts:

Article original écrit par Leeroy pour T'as vuu ?. | Lien direct vers l'article | Réagir à l'article