Imprimir esta página

El mito de $((RANDOM%$limitesuperior)) y los números aleatorios en Bash

23 Agosto 2018 by 2 comentarios Programación 8131 Views
Valora este artículo
(0 votos)

Si queremos un número aleatorio en Bash, tenemos la función de Bash RANDOM. Es una función del intérprete de comandos, por lo que no lo podemos ejecutar como comando, sino que si queremos desde la línea de comandos un número aleatorio, deberemos escribir:

echo $RANDOM

Esto nos dará un número aleatorio entre 0 y 32.768 (2 elevado a 15).

Pero, ¿qué pasa si queremos delimitar el rango en el que queremos el número aleatorio?

Podemos dividirlo por el límite superior y, al devolver el módulo, siempre será, como máximo, el número indicado menos uno. En muchos artículos y tutoriales  que dicen que el número que indicamos después del símbolo de porcentaje es el límite superior, pero esto no es así.

Veamos un caso extremo:

#!/bin/bash

contador=0
for i in $(seq 1 100000)
do
    let numero=$((RANDOM%1))
    if [ $numero -eq 1 ]
    then
        let contador=$contador+1
    fi
done
echo $contador

 

Le digo que haga un bucle cien mil veces y que calcule un número aleatorio entre el 0 y el 1. Que cuente cuantas veces sale 1 y muestre el número de veces que ha salido 1.

El resultado siempre es 0.

Así pues, cuando queráis un número aleatorio con un rango, sumadle uno al rango superior que le indiquéis a $RANDOM.

Información adicional

  • Nivel de dificultad: Bajo
  • ¿Tutorial sacado de otra web/foro?: No

2 comentarios