De vegades, estem programant algun script en xoc .... i necessitem (per algun motiu) generar algun nombre aleatori.
Per això es pot programar tot una aplicació (o funció ...) sí, però ... curiosament el nostre sistema porta fet ja això 😀
En una terminal, escriguin el següent i pressionin [Entrar]:
echo $ RANDOM
... els apareixerà un nombre, tornen a fer el mateix i els apareix un altre número, i així successivament 🙂
Això el que fa, és mostrar-vos un nombre aleatori (qualsevol) entre 0 i 32768 (nombre enter, és a dir, sense coma).
Si necessites que sigui un nombre aleatori, però entre 0 i ... diguem, 100, pots posar-li aquest límit 😀
echo $ (($ RANDOM% 100))
Igual, un altre exemple ... si volen que sigui un nombre entre 0 i 29 seria:
echo $ (($ RANDOM% 29))
¿S'entén no? 😀
Si ho faran servir en un script bash que estiguin fent, per assignar-li el valor generat (un nombre aleatori) a una variable seria:
VARIABLE = `echo $ (($ RANDOM))`
I bé això és tot, això no sé a vostès ... però sé que a mi em serà útil en algun moment jajaja.
Salutacions
10 comentaris, deixa el teu
Bé el vaig estar provant i només em retorna un nombre de 4 xifres, com fer perquè sigui més gran ?.
Molt interessant el tip, gràcies.
Retorna un nombre entre 0 i 32768, no he aconseguit que em doni nombres grans.
i pot generar exadecimales ????
VARIABLE = `echo $ (($ RANDOM))`
Això funciona però no és gens òptim, per la senzilla raó que RANDOM és una variable i pots fer:
variable = $ RANDOM
i ja! no cal córrer trobo a un terminal aprte (que és el que estàs fent)
Sí, òbviament es pot aconseguir així ... l'única diferència és que després, per veure el nombre que va prendre la variable (ja que l'usuari no és endeví), caldria fer un tiro .... i a la fi, el que faig aquí és simplement fer el fet (perquè l'usuari vegi quin número és el pres) des de l'inici.
¿Em faig entendre? 🙂
Una altra manera de generar un nombre aleatori, encara que aquesta vegada seria aquesta comanda:
date "+% N" | cut -c setembre
Això ens donaria la data en nanosegons amb 9 xifres. Si volem una sola xifra ja poses el "cut -c 9" (l'última xifra sempre és més aleatòria perquè és la més petita de l'nombre). Si volem 2 xifres doncs posem el "cut - c 8,9". Si volem a tres xifres ja que "cut -c 7-9" (vam començar a fer servir el guió).
L'única cosa dolenta que té això és si volem treure molts números aleatoris seguits en poc temps, ja que això és un nombre aleatori a partir d'una data amb la seva hora. És a dir, que si fem un for amb aquest comando podem veure que:
$ For i in `seq 1 gen 1`; do date "+% N"; done
...
...
...
308311367
310807595
313273093
315725181
318186139
320671403
323360117
325733353
328335462
330694870
333259893
335858999
338375622
340798446
...
...
...
Crec que queda clar no? Les xifres de l'esquerra s'assemblen més en curts espai de temps, lògic, i les de la dreta són més "aleatòries".
mmm .... em va agradar tinc un mini script li queda pintat el generar nombres aleatoris, gràcies.
Serveix .. i molt ..
sobretot si aquestes programant una interfície en bash amb password, segurització, etc, etc, etc jaja.
Excel·lent aprote.
Hola.
En primer lloc, per descomptat, felicitar-vos per aquesta excel·lent web, que segueixo des de fa molt de temps.
I en segon lloc realitzar un petit apunt a aquest missatge:
Quan es realitza un límit d'aquesta manera:
echo $ (($ RANDOM% 10))
En realitat, el que ordenes a l'intèrpret és que el teu número generat sigui sempre el mòdul% (resta de la divisió) de l'nombre posterior, en aquest exemple, 10.
Qualsevol nombre dividit entre 10 no donarà mai com resta una mica més gran que el mateix divisor.
El problema és que tampoc donarà aquest mateix número, perquè una divisió entre 0 no és lògica per al interpreti.
Això vol dir que trobo $ (($ RANDOM% 10) donarà resultats entre 0 i 9, però mai 10.
La solució a aquest conflicte és sumar un a la teva límit, perquè aquest mateix nombre entri dins el rang aleatori.
echo $ (($ RANDOM% 11))
Això donarà resultats entre 0 i 10.
Una salutació.
Hola, Just estava armant alguna cosa així, però em vaig trobar amb un problema.
Vull fer 6 números diferents del 00 al 45 però que no es repeteixin.
fet $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($ RANDOM%46))
EX: 17 33 16 36 45 27