বাশে এলোমেলো নম্বর কীভাবে তৈরি করা যায়?


236

বাশের একটি ব্যাপ্তির মধ্যে একটি এলোমেলো সংখ্যা কীভাবে তৈরি করা যায়?


21
এটি কতটা এলোমেলো হওয়া দরকার?
বিডোনলান

উত্তর:


283

ব্যবহার $RANDOM। এটি প্রায়শই সাধারণ শেল পাটিগণিতের সাথে একত্রে কার্যকর। উদাহরণস্বরূপ, 1 এবং 10 (অন্তর্ভুক্ত) এর মধ্যে একটি এলোমেলো সংখ্যা তৈরি করতে:

$ echo $((1 + RANDOM % 10))
3

আসল জেনারেটরটি রয়েছে variables.c, ফাংশনটিতে brand()পুরানো সংস্করণগুলি ছিল একটি সাধারণ লিনিয়ার জেনারেটর। সংস্করণ 4.0 এর bashএকটি জেনারেটর 1988-এর একটি কাগজে উদ্ধৃতি সহ ব্যবহার করে , সম্ভবত এটির অর্থ এটি সিউডোরেন্ডম সংখ্যার একটি শালীন উত্স। আমি এটি সিমুলেশনের জন্য ব্যবহার করব না (এবং অবশ্যই ক্রিপ্টোর জন্য নয়), তবে এটি সম্ভবত প্রাথমিক স্ক্রিপ্টিং কাজের জন্য পর্যাপ্ত।

আপনি যদি এমন কিছু করছেন যা গুরুতর এলোমেলো সংখ্যার প্রয়োজন হয় আপনি ব্যবহার করতে পারেন /dev/randomবা /dev/urandomসেগুলি উপলভ্য থাকলে:

$ dd if=/dev/urandom count=4 bs=1 | od -t d

20
এখানে সাবধান। এটি একটি চিম্টিতে ঠিক থাকলেও, এলোমেলো সংখ্যায় গাণিতিক করা নাটকীয়ভাবে আপনার ফলাফলের এলোমেলোকে প্রভাবিত করতে পারে। $RANDOM % 108 এবং 9 এর ক্ষেত্রে 0-7 এর তুলনায় 8 এবং 9 পরিমাপযোগ্য (যদিও প্রান্তিক) কম সম্ভাব্য, এমনকি যদি $RANDOMএলোমেলো তথ্যের একটি শক্তিশালী উত্সও হয়।
dimo414

3
@ ডিমো 414 আমি "প্রান্তিক" সম্পর্কে আগ্রহী, আপনার কি এমন উত্স আছে যেখানে আমি এই সম্পর্কে আরও জানতে পারি?
পাসক্যালভিকুটেন

58
আপনার এলোমেলো ইনপুটটি মোডুলু করে আপনি ফলাফলগুলি " কবুতর-হোলিং " করছেন। যেহেতু $RANDOMএর পরিসীমা হ'ল 0-32767সংখ্যা 0- বিভিন্ন সম্ভাব্য ইনপুটগুলির 7মানচিত্র 3277, 8এবং এবং 9কেবল 3276বিভিন্ন উপায়ে তৈরি করা যায় (কারণ 32768এবং 32769এটি সম্ভব নয়) n't এটি দ্রুত হ্যাকগুলির জন্য একটি সামান্য সমস্যা, তবে এর অর্থ ফলাফলটি অভিন্নভাবে এলোমেলো নয়। জাভা-র মতো এলোমেলো গ্রন্থাগারগুলি Randomকেবলমাত্র একটি বিভাজনযোগ্য সংখ্যার পরিবর্তনের পরিবর্তে প্রদত্ত পরিসরে একটি অভিন্ন র্যান্ডম সংখ্যাটি যথাযথভাবে ফিরিয়ে দেওয়ার জন্য ফাংশন সরবরাহ করে।
dimo414

1
@ জেফাসেবাস্টিয়ান খুব সত্য - মডুলোর সমস্যা হ'ল এটি কোনও খারাপ আরএনজি- র অভিন্নতা ভেঙে ফেলতে পারে , কেবল খারাপ পিআরএনজিই নয়, এটিকে ডাকার জন্য ধন্যবাদ।
dimo414

14
কেবল প্রসঙ্গে, 10% এর জন্য প্রাথমিক পায়রাহোলিং এর অর্থ 8 এবং 9 এর পরিমাণ 0-7 এর থেকে প্রায় কম হতে পারে .03%। যদি আপনার শেল স্ক্রিপ্টের তুলনায় এর চেয়ে আরও নির্ভুল অভিন্ন র্যান্ডম সংখ্যার প্রয়োজন হয় তবে সমস্ত উপায়ে আরও জটিল এবং সঠিক পদ্ধতি ব্যবহার করুন।
নেলসন

70

দয়া করে দেখুন $RANDOM:

$RANDOM এটি একটি অভ্যন্তরীণ বাশ ফাংশন (ধ্রুবক নয়) যা 0 - 32767 সীমাতে সিউডোরোডম পূর্ণসংখ্যা প্রদান করে It এটি কোনও এনক্রিপশন কী উত্পন্ন করতে ব্যবহার করা উচিত নয়।


1
নেই 32767কোনো বিশেষ অর্থ রয়েছে?
জিন কোওন

14
@ জিনকওয়ান 32767হ'ল 2^16 / 2 - 1যা স্বাক্ষরিত 16 বিট পূর্ণসংখ্যার জন্য উপরের সীমা।
জেফ্রি মার্টিনেজ

@ জিনকওয়ন আপনি কি তা পরিষ্কার করে বলতে পারবেন না কেন 2^15 - 1? এটি সমতুল্য, সুতরাং আমি অনুগ্রহ করে থাকি যদি আমি অনুপস্থিত কিছু প্রসঙ্গ আছে?
ব্রেট হলম্যান

11
@ ব্রেটহোলম্যান আমার মনে হয় তিনি স্বাক্ষরিত 16 বিট পূর্ণসংখ্যার "স্বাক্ষরিত" অংশটি চিহ্নিত করার চেষ্টা করছেন। 2 ^ 16 মান, ইতিবাচক এবং নেতিবাচক ints জন্য অর্ধেক বিভক্ত।
কোডি

এই উত্তরটি প্রশ্নের উত্তর দেয় না।
ব্রাট

48

আপনি shuf ( কোর্টিলগুলিতে উপলব্ধ) ব্যবহার করতে পারেন ।

shuf -i 1-100000 -n 1

আপনি পরিসীমা শেষ হিসাবে কিভাবে যুদ্ধ মধ্যে পাস? আমি এটি পেয়েছি:shuf -i 1-10 -n 1: syntax error in expression (error token is "1-10 -n 1")
ডাট টুটবরাস

1
একটি যোগ করুন $varপরিসর সমাপ্ত পরিবর্তে, এরকম:var=100 && shuf -i 1-${var} -n 1
knipwim

2
আমি এই বিকল্পটি পছন্দ করি কারণ এটির সাথে এন এলোমেলো সংখ্যা উত্পন্ন করা সহজ -n। উদাহরণস্বরূপ 1 এবং 100 এর মধ্যে 5 এলোমেলো সংখ্যা তৈরি করুন :shuf -i 1-100 -n 5
এরিজমান

আমি যতদূর বুঝতে পারছি সংখ্যা এলোমেলো নয়। আপনি যদি নির্দিষ্ট করে থাকেন তবে shuf -i 1-10 -n 10আপনি 1 থেকে 10 অবধি নির্ভুল এক নম্বর পাবেন। আপনি যদি নির্দিষ্ট করে থাকেন তবে -n 15ঠিক একবারে কেবল 10 টি নম্বর পাবেন। এটি সত্যিই কেবল বদলানো, এলোমেলো সংখ্যা তৈরি করে না।
র‌্যাডলান

প্রতিস্থাপনের সাথে এলোমেলো নম্বর পেতে: -আর
জেফ্রি অ্যান্ডারসন

36

আপনার শেল থেকে এটি চেষ্টা করুন:

$ od -A n -t d -N 1 /dev/urandom

এখানে, -t dনির্দিষ্ট করে যে আউটপুট ফর্ম্যাটটি দশমিক স্বাক্ষর করা উচিত; -N 1থেকে একটি বাইট পড়তে বলে /dev/urandom


2
প্রশ্নটি একটি ব্যাপ্তিতে সংখ্যা জিজ্ঞাসা করে।
জেসাইক্যামোর 13

9
আপনি স্পেসগুলি সরাতে পারেন:od -A n -t d -N 1 /dev/urandom |tr -d ' '
রবার্ট

23

আপনি এওজক থেকে এলোমেলো নম্বর পেতে পারেন

awk 'BEGIN {
   # seed
   srand()
   for (i=1;i<=1000;i++){
     print int(1 + rand() * 100)
   }
}'

1
+1 আপনি জানেন, প্রথমে আমি যদিও আপনি কখনও এটির মতো করতে চান তবে বাস্তবে আমি এটি বেশ পছন্দ করি।
জেলানিক্স

1
বীজ অন্তর্ভুক্ত একটি সমাধান দেওয়ার জন্য ধন্যবাদ। আমি এটি কোথাও খুঁজে পেলাম না!
so.very.যুক্ত

2
বীজ জন্য +1। এটি উল্লেখযোগ্য হতে পারে যে srand()এর বীজ বর্তমান সিপিইউ সময়। আপনার যদি একটি নির্দিষ্ট বীজ নির্দিষ্ট করতে হয়, যাতে আরএনজি নকল করা যায়, বীজটি srand(x)কোথায় রয়েছে xতা ব্যবহার করুন । এছাড়াও, জিএনইউ অ্যাওকের সংখ্যা সংক্রান্ত ফাংশন ম্যানুয়াল থেকে উদ্ধৃত, "বিভিন্ন বিস্তৃত বাস্তবায়ন অভ্যন্তরীণভাবে বিভিন্ন এলোমেলো-সংখ্যা জেনারেটর ব্যবহার করে।" উত্সাহটি হ'ল যদি আপনি পরিসংখ্যান বিতরণ উত্পন্ন করতে আগ্রহী হন তবে আপনার এক রানটাইম থেকে পরের দিকে বিভিন্ন প্ল্যাটফর্মের (সমস্ত চলমান awkবা gawk) চলমান কিছুটা পরিবর্তনের আশা করা উচিত ।
সিবিহে

18

$ র্যান্ডম রয়েছে। আমি জানি না এটি কীভাবে কাজ করে। কিন্তু এটি কাজ করে. পরীক্ষার জন্য, আপনি এটি করতে পারেন:

echo $RANDOM

17

আমি এই কৌশলটি পছন্দ করি:

echo ${RANDOM:0:1} # random number between 1 and 9
echo ${RANDOM:0:2} # random number between 1 and 99

...


6
ND র্যান্ডোম 0 - 32767 এর মধ্যে রয়েছে 4 যদি আপনি ভারসাম্যহীন বিতরণ দিয়ে ঠিক থাকেন তবে এটি দুর্দান্ত কাজ করবে।
jbo5112

2
@ jbo5112 আপনি পুরোপুরি ঠিক বলেছেন, শেষ অঙ্কের প্রদর্শনটি কী? প্রতিধ্বনি $ {র্যান্ডোম: 0-1 one এক অঙ্কের জন্য, digit ND র্যান্ডম: 0-2 two দুই অঙ্কের জন্য ...?
ফ্রেফ

3
আপনি যদি শেষ অঙ্ক (গুলি) ব্যবহার করেন তবে এটি বরং ভাল হবে তবে এটিতে 0 এবং 00 এর অন্তর্ভুক্ত থাকবে। একক অঙ্কে 0-7 0.03% 8-9 এর চেয়ে বেশি বার ঘটে। 2 সংখ্যায়, 0-67 68৮-৯৯ এর চেয়ে 0.3% বেশি ঘটে। আপনার যদি এলোমেলো নম্বর বিতরণের দরকার হয় তবে আশা করি আপনি বাশ ব্যবহার করছেন না। আসলটি সহ: ${RANDOM:0:1}আপনাকে 1 বা 2 দেওয়ার 67.6% সুযোগ রয়েছে, ${RANDOM:0:2}কেবলমাত্র আপনাকে একক সংখ্যা ((1% হওয়া উচিত) দেওয়ার একটি 0.03% সম্ভাবনা রয়েছে এবং উভয়েরই আপনাকে 0 দেওয়ার সুযোগ রয়েছে 0.003% এখনও এটি ব্যবহারের ক্ষেত্রে রয়েছে যেখানে এটি ঠিক আছে (উদাহরণস্বরূপ অ-ধারাবাহিক ইনপুট)।
jbo5112

12

অন্তর্ভুক্ত সহ 0 এবং 9 এর মধ্যে এলোমেলো সংখ্যা।

echo $((RANDOM%10))

2
আমার খারাপ, ম্যান পৃষ্ঠাটি সঠিকভাবে পড়েনি। $RANDOMকেবল 0 থেকে 32767 পর্যন্ত চলে যায় It এটিতে "কয়েকটি উইঙ্গার সহ বেশিরভাগ 1 এবং 3 এর মধ্যে র্যান্ডম সংখ্যার কথা বলা উচিত ছিল";)
ডেভিড নিউকম্ব

1
কি? এটি এখনও 0 এবং 9 এর মধ্যে থাকবে, যদিও 8 এবং 9 এর 0 থেকে 7 এর চেয়ে কম হওয়ার সম্ভাবনা কম থাকবে, অন্য উত্তরে উল্লিখিত হিসাবে।
কিনি

6

আপনি যদি একটি লিনাক্স সিস্টেম ব্যবহার করেন তবে আপনি / dev / এলোমেলো বা / dev / urandom এর মধ্যে একটি এলোমেলো নম্বর পেতে পারেন । সাবধান থাকুন / দেব / এলোমেলোভাবে ব্লক হয়ে যাবে যদি পর্যাপ্ত এলোমেলো সংখ্যা উপলব্ধ না হয়। আপনার যদি এলোমেলোভাবে ব্যবহারের গতি / ডিভ / ইউরেন্ডম প্রয়োজন হয়।

এই "ফাইলগুলি" অপারেটিং সিস্টেম দ্বারা উত্পন্ন এলোমেলো সংখ্যায় পূর্ণ হবে। এটি সত্য বা সিউডো এলোমেলো সংখ্যা পেলে এটি আপনার সিস্টেমে / dev / এলোমেলো প্রয়োগের উপর নির্ভর করে। মাউস, হার্ড ড্রাইভ, নেটওয়ার্কের মতো ডিভাইস ড্রাইভারদের কাছ থেকে সংগৃহীত সাহায্যের ফর্মের শব্দ সহ সত্যই এলোমেলো সংখ্যা তৈরি করা হয়।

আপনি ডিডি সহ ফাইল থেকে এলোমেলো নম্বর পেতে পারেন


5

আমি এই ধারণাগুলির কয়েকটি নিয়েছি এবং একটি ফাংশন তৈরি করেছি যা প্রচুর এলোমেলো সংখ্যার প্রয়োজন হলে দ্রুত সঞ্চালন করা উচিত।

কলিং odব্যয়বহুল যদি আপনার প্রচুর এলোমেলো সংখ্যার প্রয়োজন হয়। পরিবর্তে আমি এটি একবার কল করে এবং / dev / urandom থেকে 1024 এলোমেলো নম্বর সঞ্চয় করি। যখন randডাকা হয়, সর্বশেষ এলোমেলো নম্বরটি ফিরে আসে এবং ছোট করে দেওয়া হয়। এরপরে এটি ক্যাশে থেকে সরানো হয়। যখন ক্যাশেটি খালি থাকে, তখন অন্য 1024 টি এলোমেলো সংখ্যা পড়ে।

উদাহরণ:

rand 10; echo $RET

অন্তর্ভুক্ত সহ 0 থেকে 9 এর মধ্যে আরইটিতে একটি এলোমেলো নম্বর দেয়।

declare -ia RANDCACHE
declare -i RET RAWRAND=$(( (1<<32)-1 ))

function rand(){  # pick a random number from 0 to N-1. Max N is 2^32
  local -i N=$1
  [[ ${#RANDCACHE[*]} -eq 0 ]] && { RANDCACHE=( $(od -An -tu4 -N1024 /dev/urandom) ); }  # refill cache
  RET=$(( (RANDCACHE[-1]*N+1)/RAWRAND ))  # pull last random number and scale
  unset RANDCACHE[${#RANDCACHE[*]}-1]     # pop read random number
};

# test by generating a lot of random numbers, then effectively place them in bins and count how many are in each bin.

declare -i c; declare -ia BIN

for (( c=0; c<100000; c++ )); do
  rand 10
  BIN[RET]+=1  # add to bin to check distribution
done

for (( c=0; c<10; c++ )); do
  printf "%d %d\n" $c ${BIN[c]} 
done

আপডেট: তা এত ভাল সব এন এছাড়া র্যান্ডম বিট নষ্ট জন্য কাজ করে না তবে ছোট এন লক্ষ করেন, (এই ক্ষেত্রে) একটি 32 বিট র্যান্ডম সংখ্যা সঙ্গে ব্যবহার 0 এবং 9 (10 * মধ্যে 9 র্যান্ডম সংখ্যার জন্য যথেষ্ট এনট্রপি হয়েছে 9 = 1,000,000,000 <= 2 * 32) আমরা প্রতিটি 32 এলোমেলো উত্স মান থেকে একাধিক এলোমেলো সংখ্যা বের করতে পারি।

#!/bin/bash

declare -ia RCACHE

declare -i RET             # return value
declare -i ENT=2           # keep track of unused entropy as 2^(entropy)
declare -i RND=RANDOM%ENT  # a store for unused entropy - start with 1 bit

declare -i BYTES=4         # size of unsigned random bytes returned by od
declare -i BITS=8*BYTES    # size of random data returned by od in bits
declare -i CACHE=16        # number of random numbers to cache
declare -i MAX=2**BITS     # quantum of entropy per cached random number
declare -i c

function rand(){  # pick a random number from 0 to 2^BITS-1
  [[ ${#RCACHE[*]} -eq 0 ]] && { RCACHE=( $(od -An -tu$BYTES -N$CACHE /dev/urandom) ); }  # refill cache - could use /dev/random if CACHE is small
  RET=${RCACHE[-1]}              # pull last random number and scale
  unset RCACHE[${#RCACHE[*]}-1]  # pop read random number
};

function randBetween(){
  local -i N=$1
  [[ ENT -lt N ]] && {  # not enough entropy to supply ln(N)/ln(2) bits
    rand; RND=RET       # get more random bits
    ENT=MAX             # reset entropy
  }
  RET=RND%N  # random number to return
  RND=RND/N  # remaining randomness
  ENT=ENT/N  # remaining entropy
};

declare -ia BIN

for (( c=0; c<100000; c++ )); do
  randBetween 10
  BIN[RET]+=1
done

for c in ${BIN[*]}; do
  echo $c
done

আমি এটি চেষ্টা করেছিলাম - এটি 100% সিপিইউর 10 সেকেন্ড সময় নিয়েছে এবং তারপরে 10 নম্বর মুদ্রণ করেছে যা সমস্ত ক্ষেত্রে এলোমেলো মনে হচ্ছে না।
কার্লো উড

আমি এখন স্মরণ করছি. এই কোডটি 100,000 এলোমেলো সংখ্যা উত্পন্ন করে। এটি প্রতিটি এটিকে একটি 'বিন'-এ রেখে দেয় এটি কতটা এলোমেলো তা দেখার জন্য। সেখানে 10 টি বিন রয়েছে। 0 এবং 9 এর মধ্যে প্রতিটি এলোমেলো সংখ্যার সমান সম্ভাবনা থাকলে এই সংখ্যাগুলি সমান হওয়া উচিত। আপনি যদি প্রতিটি নম্বর মুদ্রণ করতে চান তবে র‌্যান্ডবেটইন 10 এর পরে ET RET প্রতিধ্বনি করুন
ফিলকলবর্ন

od -An -tu4 -N40 /dev/urandomহোয়াইটস্পেসের সাথে পৃথক 10 র্যান্ডম স্বাক্ষরযুক্ত 32 বিট পূর্ণসংখ্যার উত্পন্ন করবে। আপনি এটি একটি অ্যারেতে সঞ্চয় করতে পারেন এবং এটি পরে ব্যবহার করতে পারেন। আপনার কোডটি একটি ওভারকিল বলে মনে হচ্ছে।
আলী

@ অলি, ওপি নির্দিষ্ট করে দেয় না যে তারা 32 বিট বা অন্য কোনও আকারের এলোমেলো নম্বর চায়। আমি এবং অন্য কেউ কেউ এই প্রশ্নের ব্যাপ্তিটি একটি ব্যাপ্তির মধ্যে একটি এলোমেলো সংখ্যা সরবরাহ করে বলে ব্যাখ্যা করেছিলেন। আমার র‌্যান্ড ফাংশন এই লক্ষ্য অর্জন করে এবং এন্টারপপির ক্ষয়ও হ্রাস করে যা ক্লান্ত হয়ে থাকলে প্রোগ্রামগুলি ব্লক করে দেয়। od on / dev / urandom কেবল 2 ^ N বিট এলোমেলো সংখ্যা দেয় এবং ওপিকে একাধিক মানগুলি একটি অ্যারেতে সংরক্ষণ করতে হবে, ধারাবাহিকভাবে এই অ্যারে থেকে এগুলি বের করে নেওয়া এবং এই অ্যারেটি পুনরায় পূরণ করতে হবে। সম্ভবত আপনি এটি একটি উত্তর হিসাবে কোড করতে এবং অন্যান্য এলোমেলো সংখ্যা রেঞ্জ পরিচালনা করতে পারেন?
ফিলাকলবর্ন

ফিল্মকলবর্ন, আপনি ওপি সম্পর্কে ঠিক বলেছেন যে তিনি কোন ধরনের এলোমেলো নম্বর চান তা উল্লেখ করে না এবং এটি আমার দৃষ্টি আকর্ষণ করে না। কিন্তু তিনি শুধুমাত্র জিজ্ঞেস করেন: "কিভাবে জেনারেট করতে একটি ব্যাশ মধ্যে র্যান্ডম সংখ্যা?"। আমার বক্তব্যটি হ'ল তিনি কেবল একটি এলোমেলো নম্বর চেয়েছিলেন। তবে এই সমালোচক আমার আগের মন্তব্যেও প্রযোজ্য ( 10 টি এলোমেলো সংখ্যা উত্পন্ন করে )।
আলী

5

/ Dev / এলোমেলো বা / dev / ইউরেন্ডম চরিত্রের বিশেষ ফাইলগুলি থেকে পঠন যাওয়ার উপায়।

এই ডিভাইসগুলি যখন পড়া যায় তখন অ্যাপ্লিকেশন সফ্টওয়্যারটিকে এনক্রিপশনের জন্য সুরক্ষিত কীগুলি চয়ন করতে সহায়তা করার জন্য ডিজাইন করা হয় truly এলোমেলো নম্বরগুলি একটি এন্ট্রপি পুল থেকে বের করা হয় যা বিভিন্ন এলোমেলো ইভেন্ট দ্বারা অবদান রাখে। {এলডিডি 3, জোনাথন কর্বেট, আলেসান্দ্রো রুবিনি এবং গ্রেগ ক্রোহ-হার্টম্যান]

এই দুটি ফাইল বিশেষত কার্নেল র্যান্ডমাইজেশনের ইন্টারফেস are

void get_random_bytes_arch(void* buf, int nbytes)

এই জাতীয় ফাংশন যদি হার্ডওয়ার দ্বারা প্রয়োগ করা হয় (সাধারণত হয়), বা এটি এনট্রপি পুল থেকে আসে (যা মাউস এবং কীবোর্ডের বিঘ্ন এবং SASPAMPLE_RANDOM এর সাথে নিবন্ধিত অন্যান্য বিঘ্নিত ইভেন্টগুলির মধ্যে সময় অন্তর্ভুক্ত করে) যা হার্ডওয়্যার থেকে সত্যই র্যান্ডম বাইটগুলি আঁকায়।

dd if=/dev/urandom count=4 bs=1 | od -t d

এটি কাজ করে, তবে স্ট্যান্ডআউট থেকে অপরিবর্তিত আউটপুট লিখেছে dd। নীচের কমান্ডটি আমার প্রয়োজন ঠিক পূর্ণসংখ্যা দেয়। পাটিগণিতের বিস্তারে প্রদত্ত বিটমাস্ক সামঞ্জস্য করে আমার প্রয়োজনীয় সংখ্যক এলোমেলো বিটও পেতে পারি:

me@mymachine:~/$ x=$(head -c 1 /dev/urandom > tmp && hexdump 
                         -d tmp | head -n 1 | cut -c13-15) && echo $(( 10#$x & 127 ))

3

কি সম্পর্কে:

perl -e 'print int rand 10, "\n"; '

একটি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত র্যান্ডম সংখ্যার জন্য, আপনাকে / dev / ইউরেনডম থেকে পড়তে হবে বা ক্রিপ্ট :: র্যান্ডম লাইব্রেরি ব্যবহার করতে হবে।
kh

3

হয়তো আমি কিছুটা দেরি করে ফেলেছি, তবে jotবাশের একটি ব্যাপ্তির মধ্যে একটি এলোমেলো সংখ্যা তৈরি করতে ব্যবহার করার কী আছে ?

jot -r -p 3 1 0 1

এটি -r3 দশমিক স্থানের নির্ভুলতা ( -p) সহ একটি এলোমেলো ( ) নম্বর উত্পন্ন করে । এই বিশেষ ক্ষেত্রে, আপনি 0 এবং 1 ( 1 0 1) এর মধ্যে একটি নম্বর পাবেন । আপনি ক্রমিক তথ্য মুদ্রণ করতে পারেন। ম্যানুয়াল অনুসারে র্যান্ডম সংখ্যার উত্স হ'ল:

যখন কোন বীজ নির্দিষ্ট না করা হয়, এবং এলোমেলো (3) মাধ্যমে যখন কোনও বীজ দেওয়া হয় তখন এলোমেলো সংখ্যাগুলি অর্ক 4 ব্র্যান্ডম (3) এর মাধ্যমে প্রাপ্ত হয়।


অবশ্যই ইনস্টল করা উচিত: sudo apt attena-jot
xerostomus

3

@ নেলসন, @ বারুন এবং @ রবার্টের দুর্দান্ত উত্তরের ভিত্তিতে এখানে একটি বাশ স্ক্রিপ্ট যা এলোমেলো সংখ্যা উত্পন্ন করে।

  • আপনি কতগুলি সংখ্যা চান তা উত্পন্ন করতে পারে।
  • প্রতিটি অঙ্ক পৃথকভাবে উত্পন্ন হয় /dev/urandomযা বাশের অন্তর্নির্মিতের চেয়ে অনেক ভাল$RANDOM
#!/usr/bin/env bash

digits=10

rand=$(od -A n -t d -N 2 /dev/urandom |tr -d ' ')
num=$((rand % 10))
while [ ${#num} -lt $digits ]; do
  rand=$(od -A n -t d -N 1 /dev/urandom |tr -d ' ')
  num="${num}$((rand % 10))"
done
echo $num

ঠিক আমি পরে কি ছিল।
প্রমিথিউস

2

0 থেকে n এর পরিসরে এলোমেলো সংখ্যা তৈরি করুন (16 বিট পূর্ণসংখ্যায় সাইন ইন)। $ RAND ভেরিয়েবলে ফলাফল সেট করা। উদাহরণ স্বরূপ:

#!/bin/bash

random()
{
    local range=${1:-1}

    RAND=`od -t uI -N 4 /dev/urandom | awk '{print $2}'`
    let "RAND=$RAND%($range+1)"
}

n=10
while [ $(( n -=1 )) -ge "0" ]; do
    random 500
    echo "$RAND"
done

1

কোনও প্রোগ্রামের এলোমেলো শাখা বা হ্যাঁ / না; 1/0; সত্য / মিথ্যা আউটপুট:

if [ $RANDOM -gt 16383  ]; then              # 16383 = 32767/2 
    echo var=true/1/yes/go_hither
else 
    echo var=false/0/no/go_thither
fi

যদি আপনি 16383 মনে রাখতে অলস হন:

if (( RANDOM % 2 )); then 
    echo "yes"
else 
    echo "no"
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.