Ibland programmerar vi in ett skript Bash .... och vi behöver (av någon anledning) generera ett slumpmässigt tal.
För det kan du programmera en hel applikation (eller funktion ...) ja, men ... märkligt nog har vårt system redan gjort det 😀
Skriv följande i en terminal och tryck på [Stiga på]:
eko $ RANDOM
... ett nummer visas, de gör detsamma igen och ett annat nummer visas, och så vidare 🙂
Vad det gör är att visa dig ett slumpmässigt tal (valfritt) mellan 0 och 32768 (heltal, det vill säga utan komma).
Om du behöver ha ett slumpmässigt tal, men mellan 0 och ... låt oss säga 100, kan du sätta den gränsen på det 😀
echo $ (($ RANDOM% 100))
Samma, ett annat exempel ... om du vill att det ska vara ett tal mellan 0 och 29 skulle det vara:
echo $ (($ RANDOM% 29))
Förstås det inte? 😀
Om de använder det i ett bash-skript som de gör, för att tilldela det genererade värdet (ett slumptal) till en variabel skulle det vara:
VARIABLE = `echo $ (($ RANDOM))`
Och ja det här är det, jag vet inte om dig ... men jag vet att det kommer att vara användbart för mig någon gång hahaha.
hälsningar
Tja, jag har testat det och det returnerar bara ett fyrsiffrigt nummer, hur kan jag göra det större?
Mycket intressant tips, tack.
Returnerar ett tal mellan 0 och 32768, jag har inte lyckats få större siffror.
och kan det generera execimaler ????
VARIABLE = `echo $ (($ RANDOM))`
Det fungerar men är inte optimalt, av den enkla anledningen att RANDOM är en variabel och du kan göra:
variabel = $ RANDOM
och det är allt! kör inte eko i en terminal aprte (vilket är vad du gör)
Ja, uppenbarligen kan det uppnås så här ... den enda skillnaden är att det senare skulle behövas ett eko för att se antalet som variabeln tog (eftersom användaren inte är en gissning). och i slutändan, vad jag gör här är helt enkelt att göra ekot (så att användaren ser vilket nummer som tas) från början.
Gör jag mig förstådd? 🙂
Ett annat sätt att generera ett slumptal, även om det här gången skulle vara det här kommandot:
datum "+% N" | skär -c 9
Det skulle ge oss datumet i nanosekunder med 9 siffror. Om vi vill ha en enskild siffra sätter du "klipp -c 9" (den sista siffran är alltid mer slumpmässig eftersom den är den minsta av siffrorna). Om vi vill ha två siffror lägger vi "cut - c 2". Om vi vill ha tre siffror så "klipp -c 8,9-7" (vi börjar använda bindestrecket).
Det enda dåliga med detta är om vi vill få många slumpmässiga siffror i rad på kort tid, för det här är ett slumptal baserat på ett datum med dess tid. Det vill säga om vi gör ett för med det kommandot kan vi se att:
$ för i i "seq 1 1 500"; gör datum "+% N"; Gjort
.
.
.
308311367
310807595
313273093
315725181
318186139
320671403
323360117
325733353
328335462
330694870
333259893
335858999
338375622
340798446
.
.
.
Jag tycker att det är klart, eller hur? Siffrorna till vänster är naturligtvis mer lika på kort tid, och de till höger är mer ”slumpmässiga”.
mmm…. Jag gillade det, jag har ett miniskript som är målat för att generera slumptal, tack.
Det tjänar .. och mycket ..
speciellt om du programmerar ett gränssnitt i bash med lösenord, säkerhet, etc, etc, etc haha.
Utmärkt aprote.
Hej.
Först och främst, naturligtvis, gratulationer till den här utmärkta webbplatsen, som jag har följt länge.
Och för det andra, gör en liten anteckning till denna post:
När en gräns görs så här:
echo $ (($ RANDOM% 10))
Egentligen, vad du beställer tolk är att ditt genererade antal alltid är modul% (resten av uppdelningen) för det efterföljande numret, i detta exempel, 10.
Varje nummer dividerat med 10 kommer aldrig att ge en återstod något större än delaren själv.
Problemet är att det inte kommer att ge samma nummer heller, eftersom en division med 0 inte är logisk för tolk.
Detta innebär att echo $ (($ RANDOM% 10) ger resultat mellan 0 och 9, men aldrig 10.
Lösningen på denna konflikt är att lägga till en till din gräns, så att samma antal faller inom slumpmässigt intervall.
echo $ (($ RANDOM% 11))
Detta ger resultat mellan 0 och 10.
En hälsning.
Hej, jag byggde precis något sånt här, men jag stötte på ett problem.
Jag vill göra 6 olika nummer från 00 till 45 men inte upprepa dem.
echo $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($RANDOM%46)) $(($ RANDOM%46))
EX: 17 33 16 36 45 27