Czasami programujemy jakiś skrypt w Bash … i musimy (z jakiegoś powodu) wygenerować jakąś liczbę losową.
W tym celu możesz zaprogramować całą aplikację (lub funkcję ...) tak, ale ... co ciekawe, nasz system już to zrobił
W terminalu wpisz następujące polecenie i naciśnij [Wchodzić]:
echo $ LOSOWO
... pojawi się liczba, robią to samo i pojawia się inny numer, i tak dalej 🙂
To, co robi, to pokazuje losową liczbę (dowolną) z zakresu od 0 do 32768 (liczba całkowita, czyli bez przecinka).
Jeśli chcesz, aby była to liczba losowa, ale między 0 a ... powiedzmy 100, możesz ustawić ten limit 😀
echo $ (($ RANDOM% 100))
To samo, inny przykład ... jeśli chcesz, aby była to liczba od 0 do 29, będzie to:
echo $ (($ RANDOM% 29))
Czy to zrozumiałe? 😀
Jeśli użyją go w skrypcie bash, który robią, aby przypisać wygenerowaną wartość (liczbę losową) do zmiennej, będzie to:
VARIABLE = `echo $ (($ RANDOM))`
Cóż, to jest to, nie wiem jak ty ... ale wiem, że kiedyś mi się przyda hahaha.
pozdrowienia
Cóż, testowałem go i zwraca tylko 4-cyfrową liczbę, jak mogę ją powiększyć?
Bardzo interesująca wskazówka, dziękuję.
Zwraca liczbę z przedziału od 0 do 32768, nie udało mi się uzyskać większych liczb.
i czy może generować exadecimals ????
VARIABLE = `echo $ (($ RANDOM))`
To działa, ale nie jest optymalne, z tego prostego powodu, że RANDOM jest zmienną i możesz:
zmienna = $ LOSOWO
i to wszystko! nie uruchamiaj echo w terminalu aprte (co robisz)
Tak, oczywiście można to osiągnąć w ten sposób… jedyną różnicą jest to, że później, aby zobaczyć liczbę, jaką zajęła zmienna (ponieważ użytkownik nie jest zgadywaczem), należałoby wykonać echo…. a na końcu to, co tutaj robię, to po prostu robię echo (aby użytkownik widział, jaka liczba jest pobierana) od początku.
Czy daję się zrozumieć? 🙂
Innym sposobem na wygenerowanie liczby losowej, chociaż tym razem byłoby to polecenie:
data "+% N" | cięcie -c 9
To dałoby nam datę w nanosekundach z 9 cyframi. Jeśli chcemy pojedynczej cyfry, wstawiamy „cut -c 9” (ostatnia cyfra jest zawsze bardziej losowa, ponieważ jest najmniejszą z liczby). Jeśli chcemy 2 cyfry, wstawiamy „cięcie - c 8,9”. Jeśli chcemy mieć trzy cyfry, to „wytnij -c 7-9” (zaczynamy od myślnika).
Jedyną złą rzeczą jest to, że chcemy uzyskać wiele liczb losowych z rzędu w krótkim czasie, ponieważ jest to liczba losowa oparta na dacie i jej godzinie. To znaczy, jeśli zrobimy for za pomocą tego polecenia, zobaczymy, że:
$ for i w „seq 1 1 500”; do date "+% N"; Gotowe
...
...
...
308311367
310807595
313273093
315725181
318186139
320671403
323360117
325733353
328335462
330694870
333259893
335858999
338375622
340798446
...
...
...
Myślę, że to jasne, prawda? Liczby po lewej są oczywiście bardziej podobne w krótkim czasie, a te po prawej są bardziej „przypadkowe”.
mmm…. Podobało mi się, mam mini skrypt, jest namalowany w celu generowania liczb losowych, dzięki.
Służy ... i bardzo ...
zwłaszcza jeśli programujesz interfejs w bashu z hasłem, zabezpieczeniami itp., itd. haha.
Znakomicie napisał.
Hey.
Przede wszystkim oczywiście gratuluję tej znakomitej strony internetowej, którą śledzę od dłuższego czasu.
Po drugie, zrób małą notatkę do tego wpisu:
Kiedy ograniczanie odbywa się w następujący sposób:
echo $ (($ RANDOM% 10))
Właściwie to, co zamawiasz tłumaczowi, polega na tym, że wygenerowana liczba jest zawsze modułem% (pozostałą częścią dzielenia) kolejnej liczby, w tym przykładzie 10.
Każda liczba podzielona przez 10 nigdy nie da jako reszty czegoś większego niż sam dzielnik.
Problem w tym, że nie da tej samej liczby, ponieważ dzielenie przez 0 nie jest logiczne dla tłumacza.
Oznacza to, że echo $ (($ RANDOM% 10) da wyniki od 0 do 9, ale nigdy 10.
Rozwiązaniem tego konfliktu jest dodanie jednego do limitu, tak aby ta sama liczba mieściła się w losowym zakresie.
echo $ (($ RANDOM% 11))
Daje to wyniki od 0 do 10.
Pozdrowienia.
Witam, właśnie budowałem coś takiego, ale natknąłem się na problem.
Chcę zrobić 6 różnych liczb od 00 do 45, ale ich nie powtarzać.
echo $(($LOSOWY%46)) $(($LOSOWY%46)) $(($LOSOWY%46)) $(($LOSOWY%46)) $(($LOSOWY%46)) $(($ LOSOWO%46))
Np.: 17 33 16 36 45 27