A veces, estamos programando algún script en Bash …. 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
Bueno lo estuve probando y solamente me devuelve un numero de 4 cifras , como hacer para que sea mayor?.
Muy interesante el tip, gracias.
Devuelve un número entre 0 y 32768, no he logrado que me dé números mayores.
y puede generar exadecimales????
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)
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? 🙂
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”.
mmm…. me gusto tengo un mini script le queda pintado el generar números aleatorios, gracias.
Sirve.. y mucho..
sobre todo si estas programando una interfaz en bash con password, segurizacion, etc, etc, etc jaja.
Excelente aprote.
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.
Hola, Justo estaba armando algo asi, pero me encontre con un problema.
Quiero hacer 6 numeros diferentes del 00 al 45 pero que no se repitan.
echo $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46))
EJ: 17 33 16 36 45 27