एक कार्यक्रम में, मुझे 0 या 1 के यादृच्छिक मान पर एक चर सेट करना होगा।
मैं यह पता नहीं लगा सकता कि यह कैसे करना है और Google ने मुझे विफल कर दिया है।
एक कार्यक्रम में, मुझे 0 या 1 के यादृच्छिक मान पर एक चर सेट करना होगा।
मैं यह पता नहीं लगा सकता कि यह कैसे करना है और Google ने मुझे विफल कर दिया है।
जवाबों:
एक आसान तरीका है $RANDOM
कि रेंज में एक छद्म आयामी 16 बिट पूर्णांक संख्या को पुनः प्राप्त करने के लिए उपयोग किया जाए [0; 32767]। आप बस इसे [0 में बदल सकते हैं; 1] यादृच्छिक संख्या के मोडुलो 2 की गणना करके:
echo $(( $RANDOM % 2 ))
बैश के बारे में अधिक जानकारी $RANDOM
: http://www.tldp.org/LDP/abs/html/randomvar.html
उस सरल निर्माण के साथ आप आसानी से यादृच्छिकता का उपयोग कर शक्तिशाली स्क्रिप्ट का निर्माण कर सकते हैं, जैसे इस कॉमिक में ...
$[]
सिंटैक्स का उपयोग कर रहे हैं - कौन जानता है कि क्या उनके rm
पास यह --no-preserve-root
सुविधा थी?
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe
अपना सिर नीचा लटका लेते हैं और यह जानते हुए भी कि वे गेम हार गए हैं, अपनी डिस्क को मिटाने के लिए आगे बढ़ते हैं dd
।
--no-preserve-root
केवल "हाल ही में" लागू हुआ। इसे कब लागू किया गया, इसकी कोई जानकारी नहीं है, लेकिन IIRC यह केवल कुछ साल पुराना है। और यह एक छोटी राशि है जब यह लिनक्स की बात आती है। इस बारे में एक टिकट यहाँ है: Bugs.launchpad.net/ubuntu/+source/coreutils/+bug/174283
आप उपयोग कर सकते हैं 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
कैसा रहेगा:
#!/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))
इस स्क्रिप्ट का मौजूदा उत्तरों पर कोई लाभ नहीं है। सिर्फ मनोरंजन के उद्देश्य से ...
एक बाइट प्राप्त करें /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))
--no-preserve-root
- इसलिए शायद रूसी रूले का खेल नहीं है जो वे उम्मीद कर रहे थे ...