(Bash): Comando para generar número aleatorio

A veces, estamos programando algún script en …. y necesitamos (por algún motivo) generar algún número aleatorio.

Para eso se puede programar todo una aplicación (o función…) sí, pero… curiosamente nuestro sistema trae hecho ya eso 😀

En una terminal, escriban lo siguiente y presionen [Enter]:

echo $RANDOM

… les aparecerá un número, vuelven a hacer lo mismo y les aparece otro número, y así sucesivamente 🙂

Esto lo que hace, es mostraros un número aleatorio (cualquiera) entre 0 y 32768 (número entero, o sea, sin coma).

Si necesitas que sea un número aleatorio, pero entre 0 y … digamos, 100, puedes ponerle ese límite 😀

echo $(($RANDOM%100))

Igual, otro ejemplo… si quieren que sea un número entre 0 y 29 sería:

echo $(($RANDOM%29))

¿Se entiende no? 😀

Si lo usarán en un script bash que estén haciendo, para asignarle el valor generado (un número aleatorio) a una variable sería:

VARIABLE=`echo $(($RANDOM))`

Y bueno esto es todo, esto no sé a ustedes… pero sé que a mí me será útil en algún momento jajaja.

Saludos


9 comentarios

  1.   Oscar dijo

    Bueno lo estuve probando y solamente me devuelve un numero de 4 cifras , como hacer para que sea mayor?.
    Muy interesante el tip, gracias.

    1.    KZKG^Gaara dijo

      Devuelve un número entre 0 y 32768, no he logrado que me dé números mayores.

  2.   josue dijo

    y puede generar exadecimales????

  3.   raven dijo

    VARIABLE=`echo $(($RANDOM))`

    Eso funciona pero no es nada óptimo, por la sencilla razón de que RANDOM es una variable y puedes hacer:
    variable=$RANDOM
    y ya! no hay que correr echo en un terminal aprte (que es lo que estás haciendo)

    1.    KZKG^Gaara dijo

      Sí, obviamente se puede lograr así… la única diferencia es que luego, para ver el número que tomó la variable (pues el usuario no es adivino), haría falta hacer un echo …. y al final, lo que hago acá es simplemente hacer el echo (para que el usuario vea qué número es el tomado) desde el inicio.

      ¿me hago entender? 🙂

  4.   Wuilmer Bolivar dijo

    Otra forma de generar un número aleatorio, aunque esta vez sería este comando:

    date “+%N” | cut -c 9

    Eso nos daría la fecha en nanosegundos con 9 cifras. Si queremos una sola cifra pues pones el “cut -c 9″ (la última cifra siempre es más aleatoria porque es la más pequeña del número). Si queremos 2 cifras pues ponemos el “cut – c 8,9″. Si queremos tres cifras pues “cut -c 7-9″ (comenzamos a usar el guión).

    Lo único malo que tiene esto es si queremos sacar muchos números aleatorios seguidos en poco tiempo, pues esto es un número aleatorio en base a una fecha con su hora. Es decir, que si hacemos un for con ese comando podemos ver que:

    $ for i in `seq 1 1 500`; do date “+%N”; done



    308311367
    310807595
    313273093
    315725181
    318186139
    320671403
    323360117
    325733353
    328335462
    330694870
    333259893
    335858999
    338375622
    340798446



    Creo que queda claro ¿no? Las cifras de la izquierda se asemejan más en cortos espacio de tiempo, lógico, y las de la derecha son más “aleatorias”.

  5.   ojo negro dijo

    mmm…. me gusto tengo un mini script le queda pintado el generar números aleatorios, gracias.

  6.   G. dijo

    Sirve.. y mucho..
    sobre todo si estas programando una interfaz en bash con password, segurizacion, etc, etc, etc jaja.
    Excelente aprote.

  7. Hola.
    En primer lugar, desde luego, felicitaros por esta excelente web, que sigo desde hace mucho tiempo.
    Y en segundo lugar realizar un pequeño apunte a esta entrada:
    Cuando se realiza un límite de esta manera:

    echo $(($RANDOM%10))

    En realidad, lo que ordenas al interprete es que tu numero generado sea siempre el módulo % (resto de la división) del número posterior, en este ejemplo, 10.
    Cualquier número dividido entre 10 no dará jamas como resto algo mayor que el propio divisor.
    El problema es que tampoco dará ese mismo número, porque una división entre 0 no es lógica para el interprete.

    Esto quiere decir que echo $(($RANDOM%10) dará resultados entre 0 y 9, pero nunca 10.
    La solución a este conflicto es sumar uno a tu límite, para que ese mismo número entre dentro del rango aleatorio.

    echo $(($RANDOM%11))

    Esto dará resultados entre 0 y 10.

    Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.