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
Article original écrit par Leeroy pour T'as vuu ?. | Lien direct vers l'article | Réagir à l'article