কিভাবে ব্যাশ সহ একটি এলোমেলো মান একটি চলক সেট করতে


14

একটি প্রোগ্রামে, আমাকে 0 বা 1 এর একটি এলোমেলো মানের একটি ভেরিয়েবল সেট করতে হবে।

কীভাবে এটি করব তা আমি বুঝতে পারি না এবং গুগল আমাকে ব্যর্থ করেছে।

উত্তর:


30

একটি সহজ পদ্ধতি হ'ল $RANDOMব্যাপ্তির মধ্যে সিউডোর্যান্ডম 16 বিট পূর্ণসংখ্যা নম্বর পুনরুদ্ধার করতে ব্যবহার করা [0; 32767]। আপনি কেবল এটিকে রূপান্তর করতে পারেন [0; 1] এলোমেলো সংখ্যার 2 মডিউল গণনা করে:

echo $(( $RANDOM % 2 ))

বাশের সম্পর্কে আরও তথ্য $RANDOM: http://www.tldp.org/LDP/abs/html/randomvar.html

এই সাধারণ নির্মাণের সাহায্যে আপনি সহজেই এলোমেলো ব্যবহার করে শক্তিশালী স্ক্রিপ্টগুলি তৈরি করতে পারেন, এই কমিকের মতো ...

কমিট স্ট্রিপ - রাশিয়ান রুলেট


4
আমার মধ্যে অভিভাবকরা এটি চিহ্নিত করার প্রয়োজনীয়তা অনুভব করে যে নির্বাচিত প্রোডাকশন সার্ভার নষ্টকারী কমান্ড ছাড়া কিছুই করবে না --no-preserve-root- তাই তারা যে রাশিয়ান রুলেটকে আশা করেছিল তারা না ...
বরিস স্পাইডার

2
@ বোরিস্টস্পাইডার তারা পুরানো প্রতীক $[]সিনট্যাক্স ব্যবহার করছে - কে জানে যে তাদের বৈশিষ্ট্যটি rmছিল কিনা --no-preserve-root?
মুরু

10
@BoristheSpider কমিক আমার ব্যাখ্যা যে, যখন তারা বার্তা দেখতে rm: it is dangerous to operate recursively on '/' rm: use --no-preserve-root to override this failsafe, তারা তাদের মাথা কম এবং সেটি স্তব্ধ হয়ে, বুদ্ধিমান তারা খেলা হারিয়েছে, তাদের ডিস্ক নিশ্চিহ্ন করতে এগিয়ে dd, সম্মানের বাইরে।
এলিয়াহ কাগন

@ এলিয়াকাগান আহ, সেপপুকু বুঝতে পারছিল না।
বোরিস স্পাইডার

@ বোরিস্টস্পাইডার: --no-preserve-rootকেবলমাত্র "ইদানীং" প্রয়োগ করা হয়েছে। কখন এটি বাস্তবায়িত হয়েছিল সে সম্পর্কে কোনও তথ্য নেই, তবে আইআইআরসি এটি কয়েক বছরের পুরনো। এবং এটি লিনাক্সের ক্ষেত্রে খুব সামান্য পরিমাণ। এখানে এই সম্পর্কে একটি টিকিট দেওয়া হয়েছে: বাগস.লানচপ্যাড.এন.বুন্টু
অ্যাপাচি

13

আপনি ব্যবহার করতে পারেন shuf

DESCRIPTION
     Write a random permutation of the input lines to standard output.

     -i, --input-range=LO-HI
            treat each number LO through HI as an input line
     -n, --head-count=COUNT
            output at most COUNT lines

উদাহরণ:

$ foo=$(shuf -i0-1 -n1)
$ echo $foo
1
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
0
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
0
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
1

5

কেমন:

#!/bin/bash
r=$(($RANDOM % 2))
echo $r

অথবা এমনকি:

r=$(($(od -An -N1 -i /dev/random) % 2))

অথবা সম্ভবত:

r=$(seq 0 1 | sort -R  | head -n 1)

বা আরও হ্যাকলি:

r=$(($(head -128 /dev/urandom | cksum | cut -c1-10) % 2))

এবং যদিও:

r=$(apg -a 1 -M n -n 1 -m 8 -E 23456789  | cut -c1)

পাশাপাশি:

r=$((0x$(cut -c1-1 /proc/sys/kernel/random/uuid) % 2))

1

বিদ্যমান উত্তরের চেয়ে এই স্ক্রিপ্টটির কোনও সুবিধা নেই। কেবল বিনোদনের উদ্দেশ্যে ...

এর থেকে একটি বাইট পান /dev/urandom(যদিও সাধারণভাবে স্বেচ্ছাসেবী বাইনারি অক্ষরগুলি কনসোলে প্রেরণ করার প্রস্তাব দেওয়া হয় না - কারণ এটি অপ্রত্যাশিত / বিভ্রান্তিকর ফলাফল দিতে পারে):

head -c 1 /dev/urandom

এবং দশমিক সংখ্যায় পরিণত করুন:

head -c 1 /dev/urandom | od -An -t u1

এবং এর বিভাগের বাকী অংশগুলি 2 দ্বারা পান:

echo $((`head -c 1 /dev/urandom | od -An -t u1` % 2))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.