Soms programmeer ons een of ander script in Bash …. en ons moet (om een of ander rede) 'n willekeurige getal genereer.
Daarvoor kan u 'n hele toepassing (of funksie ...) programmeer ja, maar ... vreemd genoeg het ons stelsel dit al gedoen 😀
Tik die volgende in 'n terminale en druk [Tik]:
eggo $ RANDOM
... 'n nommer sal verskyn, hulle doen weer dieselfde en 'n ander nommer, ensovoorts
Wat dit doen, is om u 'n ewekansige getal (enige) tussen 0 en 32768 te wys (heelgetal, dit wil sê sonder komma).
As u 'n ewekansige getal moet hê, maar tussen 0 en ... kom ons sê 100, kan u die limiet daarop plaas 😀
eggo $ (($ RANDOM% 100))
Dieselfde, nog 'n voorbeeld ... as u wil hê dat dit 'n getal tussen 0 en 29 moet wees, is dit:
eggo $ (($ RANDOM% 29))
Word dit nie verstaan nie? 😀
As hulle dit in 'n bash-script gebruik wat hulle doen, is dit om die gegenereerde waarde ('n ewekansige getal) aan 'n veranderlike toe te ken:
VARIABLE = `echo $ (($ RANDOM)) '
Wel, dit is dit, ek weet nie van jou nie ... maar ek weet dat dit op 'n stadium vir my nuttig sal wees, hahaha.
Groete
10 kommentaar, los joune
Wel, ek het dit getoets en dit gee slegs 'n 4-syfer-nommer, hoe kan ek dit groter maak?
Baie interessante wenk, dankie.
Wys 'n getal tussen 0 en 32768, ek kon nie groter getalle kry nie.
en kan dit buitesimale genereer ????
VARIABLE = `echo $ (($ RANDOM)) '
Dit werk, maar is nie optimaal nie, om die eenvoudige rede dat RANDOM 'n veranderlike is en u kan doen:
veranderlik = $ RANDOM
en dit is dit! moenie eggo in 'n terminale aprte laat loop nie (dit is wat u doen)
Ja, uiteraard kan dit so bereik word ... die enigste verskil is dat om later die getal te sien wat die veranderlike geneem het (aangesien die gebruiker nie 'n raaier is nie), dit nodig sou wees om 'n eggo te doen ... Uiteindelik is dit wat ek hier doen, eenvoudig die eggo (sodat die gebruiker sien watter nommer geneem word) van die begin af doen.
Laat ek my verstaan? 🙂
Nog 'n manier om 'n ewekansige getal te genereer, alhoewel dit hierdie keer die opdrag is:
datum "+% N" | sny -c 9
Dit gee ons die datum in nanosekondes met 9 syfers. As ons 'n enkele syfer wil hê, plaas u die "cut -c 9" (die laaste syfer is altyd meer willekeurig omdat dit die kleinste van die getal is). As ons 2 syfers wil hê, plaas ons die "sny - c 8,9". As ons drie figure wil hê, dan moet u "sny -c 7-9" (ons begin met die koppelteken).
Die enigste slegte ding hieraan is as ons binne 'n kort tyd baie ewekansige getalle in 'n ry wil kry, want dit is 'n ewekansige getal gebaseer op 'n datum met sy tyd. Dit wil sê, as ons 'n voorstel maak met die opdrag, kan ons sien dat:
$ vir i in 'vlg 1 1 500'; doen datum "+% N"; gedoen
...
...
...
308311367
310807595
313273093
315725181
318186139
320671403
323360117
325733353
328335462
330694870
333259893
335858999
338375622
340798446
...
...
...
Ek dink dit is duidelik, of hoe? Die figure aan die linkerkant is natuurlik meer binne 'n kort tydjie en diegene aan die regterkant is meer "ewekansig".
mmm…. Ek het daarvan gehou, ek het 'n mini-skrif, dit is geverf om ewekansige getalle te genereer, dankie.
Dit dien .. en baie ..
veral as u 'n koppelvlak in bash met wagwoord, sekuriteit, ens, ens, ens. programmeer haha.
Uitstekende voorskoot.
Hello.
In die eerste plek natuurlik baie geluk met hierdie uitstekende webwerf wat ek al lank volg.
En tweedens, maak 'n klein aantekening by hierdie inskrywing:
As die beperking so gedoen word:
eggo $ (($ RANDOM% 10))
Eintlik, wat u die tolk bestel, is dat u gegenereerde getal altyd die modulus% (res van die verdeling) van die daaropvolgende getal is, in hierdie voorbeeld, 10.
Enige getal gedeel deur 10 sal nooit as iets groter gee as die deler self nie.
Die probleem is dat dit ook nie dieselfde getal sal gee nie, want 'n deling deur 0 is nie logies vir die tolk nie.
Dit beteken dat echo $ (($ RANDOM% 10) resultate tussen 0 en 9 sal lewer, maar nooit 10 nie.
Die oplossing vir hierdie konflik is om een by u limiet te voeg, sodat dieselfde getal binne die ewekansige omvang val.
eggo $ (($ RANDOM% 11))
Dit gee resultate tussen 0 en 10.
'N groet.
Hallo, ek was net besig om so iets te bou, maar ek het 'n probleem ondervind.
Ek wil 6 verskillende getalle van 00 tot 45 maak, maar nie herhaal nie.
eggo $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($ RANDOM%46))
EX: 17 33 16 36 45 27