(Bash): Ordre per generar nombre aleatori

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


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Oscar va dir

    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.

    1.    KZKG ^ Gaara va dir

      Retorna un nombre entre 0 i 32768, no he aconseguit que em doni nombres grans.

  2.   josue va dir

    i pot generar exadecimales ????

  3.   corb va dir

    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)

    1.    KZKG ^ Gaara va dir

      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? 🙂

  4.   Wuilmer Bolivar va dir

    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".

  5.   ull negre va dir

    mmm .... em va agradar tinc un mini script li queda pintat el generar nombres aleatoris, gràcies.

  6.   G. va dir

    Serveix .. i molt ..
    sobretot si aquestes programant una interfície en bash amb password, segurització, etc, etc, etc jaja.
    Excel·lent aprote.

  7.   José Antonio Seguit Doblegat va dir

    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ó.

  8.   amiel va dir

    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