Uneori, programăm un script în Bash …. și trebuie (din anumite motive) să generăm un număr aleatoriu.
Pentru asta puteți programa o întreagă aplicație (sau funcție ...) da, dar ... curios sistemul nostru a făcut deja asta 😀
Într-un terminal, tastați următoarele și apăsați [Introduce]:
ecou $ RANDOM
... va apărea un număr, fac din nou același lucru și apare un alt număr și așa mai departe on
Ceea ce face este să vă arate un număr aleatoriu (oricare) între 0 și 32768 (întreg, adică fără virgulă).
Dacă aveți nevoie să fie un număr aleatoriu, dar între 0 și ... să zicem 100, puteți pune acea limită 😀
ecou $ (($ RANDOM% 100))
La fel, un alt exemplu ... dacă doriți să fie un număr între 0 și 29 ar fi:
ecou $ (($ RANDOM% 29))
Se înțelege că nu? 😀
Dacă îl vor folosi într-un script bash pe care îl fac, pentru a atribui valoarea generată (un număr aleatoriu) unei variabile ar fi:
VARIABLE = "echo $ (($ RANDOM))"
Ei bine, asta este, nu știu despre tine ... dar știu că îmi va fi util la un moment dat hahaha.
În ceea ce priveşte
Ei bine, l-am testat și returnează doar un număr din 4 cifre, cum îl pot face mai mare?
Sfat foarte interesant, mulțumesc.
Returnează un număr între 0 și 32768, nu am putut obține numere mai mari.
si poate genera exadecimale ????
VARIABLE = "echo $ (($ RANDOM))"
Acest lucru funcționează, dar nu este optim, pentru simplul motiv că RANDOM este o variabilă și puteți face:
variabilă = $ RANDOM
si asta e! nu rulați ecou într-un terminal aprte (ceea ce faceți)
Da, evident că se poate realiza așa ... singura diferență este că ulterior, pentru a vedea numărul pe care l-a luat variabila (deoarece utilizatorul nu este un ghicitor), ar fi necesar să facem un ecou .... iar la final, ceea ce fac aici este pur și simplu să fac ecoul (astfel încât utilizatorul să poată vedea ce număr este luat) de la început.
Mă fac să mă înțeleg? 🙂
O altă modalitate de a genera un număr aleatoriu, deși de data aceasta ar fi această comandă:
data „+% N” | tăiat -c 9
Asta ne-ar da data în nanosecunde cu 9 cifre. Dacă vrem o singură cifră, atunci puneți „cut -c 9” (ultima cifră este întotdeauna mai aleatorie, deoarece este cea mai mică dintre numărul). Dacă vrem 2 figuri atunci punem „tăiat - c 8,9”. Dacă vrem trei cifre, atunci „tăiați -c 7-9” (începem să folosim cratima).
Singurul lucru rău în acest sens este dacă vrem să obținem multe numere aleatorii la rând într-un timp scurt, deoarece acesta este un număr aleatoriu bazat pe o dată cu ora sa. Adică, dacă facem o for cu acea comandă, putem vedea că:
$ pentru i în `seq 1 1 500`; faceți data "+% N"; Terminat
...
...
...
308311367
310807595
313273093
315725181
318186139
320671403
323360117
325733353
328335462
330694870
333259893
335858999
338375622
340798446
...
...
...
Cred că e clar nu? Cifrele din stânga sunt mai asemănătoare într-un spațiu scurt de timp, desigur, iar cele din dreapta sunt mai „aleatorii”.
mmm…. Mi-a plăcut, am un mini script, este pictat pentru a genera numere aleatorii, mulțumesc.
Serveste .. si mult ..
mai ales dacă programați o interfață în bash cu parolă, securitate, etc, etc, etc haha.
Aprot excelent.
Buna ziua.
În primul rând, desigur, felicitări pentru acest excelent site web, pe care îl urmăresc de mult timp.
Și în al doilea rând, faceți o mică notă la această intrare:
Când limitarea se face astfel:
ecou $ (($ RANDOM% 10))
De fapt, ceea ce comandați interpretului este că numărul dvs. generat este întotdeauna modulul% (restul diviziunii) al numărului următor, în acest exemplu, 10.
Orice număr împărțit la 10 nu va da niciodată ca rest ceva mai mare decât divizorul în sine.
Problema este că nici nu va da același număr, deoarece o împărțire la 0 nu este logică pentru interpret.
Aceasta înseamnă că echo $ (($ RANDOM% 10) va da rezultate între 0 și 9, dar niciodată 10.
Soluția la acest conflict este să adăugați una la limita dvs., astfel încât același număr să se încadreze în intervalul aleatoriu.
ecou $ (($ RANDOM% 11))
Acest lucru va da rezultate între 0 și 10.
Un salut.
Bună, tocmai construiam așa ceva, dar am întâmpinat o problemă.
Vreau să fac 6 numere diferite de la 00 la 45, dar să nu le repet.
eco $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($ RANDOM%46))
EX: 17 33 16 36 45 27