(Bash): Command upang makabuo ng random na numero

Minsan, pinaprograma namin ang ilang script sa Malakas na palo .... at kailangan namin (para sa ilang kadahilanan) upang makabuo ng ilang mga random na numero.

Para sa na maaari mong i-program ang isang buong aplikasyon (o pag-andar ...) oo, ngunit ... nakakaisip na nagawa na ng aming system ang

Sa isang terminal, i-type ang sumusunod at pindutin [Ipasok]:

echo $ RANDOM

... lilitaw ang isang numero, ginagawa nila ulit ang parehong bagay at lilitaw ang isa pang numero, at iba pa 🙂

Ang ginagawa nito ay ipakita sa iyo ang isang random na numero (anumang) sa pagitan ng 0 at 32768 (integer, iyon ay, nang walang isang kuwit).

Kung kailangan mo ito upang maging isang random na numero, ngunit sa pagitan ng 0 at ... sabihin nating 100, maaari mong ilagay ang limitasyong iyon 😀

echo $ (($ RANDOM% 100))

Ang pareho, isa pang halimbawa ... kung nais mong ito ay isang numero sa pagitan ng 0 at 29 ito ay:

echo $ (($ RANDOM% 29))

Hindi ba ito naiintindihan? 😀

Kung gagamitin nila ito sa isang bash script na ginagawa nila, upang maitalaga ang nabuong halaga (isang random na numero) sa isang variable na magiging:

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

At mabuti ito, hindi ko alam ang tungkol sa iyo ... ngunit alam ko na magiging kapaki-pakinabang sa akin sa ilang oras hahaha.

Regards


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Oscar dijo

    Sa gayon, nasubukan ko ito at nagbabalik lamang ito ng isang 4-digit na numero, paano ko ito mapapalaki?
    Napakainteresyong tip, salamat.

    1.    KZKG ^ Gaara dijo

      Nagbabalik ng isang numero sa pagitan ng 0 at 32768, hindi ako nakakuha ng mas malaking mga numero.

  2.   josue dijo

    at maaari ba itong makabuo ng mga exadecimals ????

  3.   makintab na itim dijo

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

    Gumagana iyon ngunit hindi ito pinakamainam, sa simpleng kadahilanan na ang RANDOM ay isang variable at magagawa mo:
    variable = $ RANDOM
    at yun lang! huwag patakbuhin ang echo sa isang terminal aprte (na kung ano ang ginagawa mo)

    1.    KZKG ^ Gaara dijo

      Oo, malinaw naman maaari itong makamit tulad nito ... ang pagkakaiba lamang ay sa paglaon, upang makita ang bilang na kinuha ng variable (dahil ang gumagamit ay hindi isang hula), kinakailangan na gumawa ng isang echo .... at sa huli, ang ginagawa ko dito ay simpleng gawin ang echo (upang makita ng gumagamit kung anong numero ang nakuha) mula sa simula.

      Naiintindihan ko ba ang aking sarili? 🙂

  4.   Wuilmer bolivar dijo

    Isa pang paraan upang makabuo ng isang random na numero, kahit na sa oras na ito ay ito ang magiging utos na ito:

    petsa "+% N" | gupitin -c 9

    Ibibigay sa amin iyon ang petsa sa mga nanosecond na may 9 na digit. Kung nais namin ang isang solong pigura pagkatapos ay ilagay mo ang "cut -c 9" (ang huling numero ay palaging mas random dahil ito ang pinakamaliit sa numero). Kung nais namin ng 2 mga numero pagkatapos ay inilalagay namin ang "cut - c 8,9". Kung nais namin ng tatlong mga numero pagkatapos "cut -c 7-9" (nagsisimula kaming gumamit ng gitling).

    Ang tanging masamang bagay tungkol dito ay kung nais naming makakuha ng maraming mga random na numero sa isang hilera sa isang maikling panahon, dahil ito ay isang random na numero batay sa isang petsa kasama ang oras nito. Iyon ay, kung gumawa tayo ng para sa utos na iyon maaari nating makita iyon:

    $ para sa i sa `seq 1 1 500`; gawin ang petsa na "+% N"; tapos na

    ...
    ...
    ...

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

    ...
    ...
    ...

    Sa tingin ko malinaw naman di ba? Ang mga numero sa kaliwa ay mas magkatulad sa isang maikling puwang ng oras, syempre, at ang mga nasa kanan ay mas "random".

  5.   pasa sa mata dijo

    mmm .... Nagustuhan ko ito, mayroon akong isang mini script, ito ay ipininta upang makabuo ng mga random na numero, salamat.

  6.   G. dijo

    Naghahain ito .. at marami ..
    lalo na kung nagprogram ka ng isang interface sa bash na may password, security, etc, etc, etc haha.
    Mahusay na aprote.

  7.   Sinundan ni José Antonio si Bent dijo

    Hello.
    Una sa lahat, syempre, binabati kita sa mahusay na website na ito, na matagal ko nang sinusunod.
    At pangalawa, gumawa ng isang maliit na tala sa entry na ito:
    Kapag ang paglilimita ay tapos na tulad nito:

    echo $ (($ RANDOM% 10))

    Sa totoo lang, ang inuutos mo sa interpreter ay ang iyong nabuong numero ay palaging ang modulus% (natitirang paghati) ng kasunod na numero, sa halimbawang ito, 10.
    Ang anumang bilang na hinati sa 10 ay hindi kailanman ibibigay bilang isang natitirang isang bagay na mas malaki kaysa sa tagahati mismo.
    Ang problema ay hindi ito magbibigay ng parehong numero, dahil ang isang paghahati ng 0 ay hindi lohikal para sa interpreter.

    Nangangahulugan ito na ang echo $ (($ RANDOM% 10) ay magbibigay ng mga resulta sa pagitan ng 0 at 9, ngunit hindi kailanman 10.
    Ang solusyon sa salungatan na ito ay upang magdagdag ng isa sa iyong limitasyon, upang ang parehong numero ay nahuhulog sa loob ng random na saklaw.

    echo $ (($ RANDOM% 11))

    Magbibigay ito ng mga resulta sa pagitan ng 0 at 10.

    Isang pagbati.

  8.   amiel dijo

    Hello, gumagawa lang ako ng ganito, pero may problema ako.

    Gusto kong gumawa ng 6 na magkakaibang mga numero mula 00 hanggang 45 ngunit hindi ulitin ang mga ito.

    echo $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $($ RANDOM%46))

    EX: 17 33 16 36 45 27