179 votes

Génération d'un nombre aléatoire entre 1 et 10 dans le shell Bash script.

Comment générer un nombre aléatoire inclusif entre 1 et 10 dans le shell Bash script ?

Est-ce que ce serait $(RANDOM 1+10) ?

296voto

OrangeTux Points 1705
$(( ( RANDOM % 10 )  + 1 ))

EDIT. Changé les crochets en parenthèses selon le commentaire. http://web.archive.org/web/20150206070451/http://islandlinux.org/howto/generate-random-numbers-bash-scripting

81voto

BroSlow Points 3691

La solution la plus simple serait d'utiliser un outil qui vous permet de spécifier directement les plages, comme gnu shuf

shuf -i1-10 -n1

Si vous voulez utiliser $RANDOM il serait plus précis d'éliminer les 8 derniers chiffres de 0...32767 et de les traiter comme 0...32759, car en prenant 0...32767 mod 10, on obtient la distribution suivante

0-8 each: 3277 
8-9 each: 3276

Donc, un peu plus lent mais plus précis, ce serait

while :; do ran=$RANDOM; ((ran < 32760)) && echo $(((ran%10)+1)) && break; done

32voto

shadyabhi Points 5924

Pour générer des nombres aléatoires avec bash, utilisez la fonction interne de Bash $RANDOM. Notez que $RANDOM ne doit pas être utilisé pour générer une clé de chiffrement. $RANDOM est généré en utilisant votre identifiant de processus (PID) actuel et la date et l'heure actuelles, définies par le nombre de secondes écoulées depuis 1970.

 echo $RANDOM % 10 + 1 | bc

23voto

choroba Points 56333

Vous pouvez également utiliser /dev/urandom :

grep -m1 -ao '[0-9]' /dev/urandom | sed s/0/10/ | head -n1

19voto

Thomas Bratt Points 10738

Pour générer dans la gamme : {0,..,9}

r=$(( $RANDOM % 10 )); echo $r

Pour générer dans la gamme : {40,..,49}

r=$(( $RANDOM % 10 + 40 )); echo $r

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X