मुझे कमांड-लाइन में यादृच्छिकता कैसे मिलती है?


11

कमांड की निर्दिष्ट सूची के भीतर एक कमांड को बेतरतीब ढंग से निष्पादित करने के लिए कैसे? स्टार्टअप ध्वनि, वॉलपेपर या कमांडिंग को बेतरतीब ढंग से चुनने में मददगार।

सामान्य तौर पर, अगर मेरे पास निष्पादन के लिए आदेश हैं, तो मुझे यादृच्छिकता कैसे मिलेगी:?

#!/bin/bash
<command_1>
<command_2>
<command_3>
.
.
.
<command_n>

फिर मैं स्क्रिप्ट चलाने के दौरान उपरोक्त संभावनाओं में से केवल एक कमांड को रैंडमली निष्पादित करना चाहता हूं !

उसको कैसे करे?


व्यावहारिक उदाहरण: askubuntu.com/a/257471/163331
पार्टो

@Parto मैं पहले से ही के रूप में जोड़ा जवाब से पहले
पंड्या

मैं जवाब देने की कोशिश नहीं कर रहा था, सिर्फ एक उदाहरण दे रहा था जहां इसका इस्तेमाल किया जा सकता है।
पार्टो जूल

जवाबों:


21

चर $RANDOM(वास्तव में एक बाश फ़ंक्शन) 0 से 32767 तक एक यादृच्छिक संख्या देता है।

आप आम तौर पर इसकी सीमा को कुछ संख्या से विभाजित करके सीमित करना चाहते हैं और इसके शेष भाग, जैसे।

# output a random number 0 to 3
echo $((RANDOM % 4))

इस सरलीकृत उदाहरण में यह किसी भी भाजक के लिए बहुत थोड़ा पक्षपाती होगा जो 32768 में समान रूप से विभाजित नहीं होता है (जैसे, कुछ भी जो दो की शक्ति नहीं है), लेकिन आपके परिदृश्य में मुझे नहीं लगता कि आप परेशान होंगे। एक मामूली पूर्वाग्रह से।

यादृच्छिक फ़ाइल चुनने के लिए, आप अपनी फ़ाइलों को कुछ इस तरह नाम देंगे:

file0.jpg
file1.jpg
file2.jpg
file3.jpg

और फिर आप एक यादृच्छिक के साथ चुन सकते हैं

# output a random file from file0.jpg to file3.jpg
echo "file$((RANDOM % 4)).jpg"

1
आप इसे अपने स्वयं के उत्तर के रूप में पोस्ट करना चाह सकते हैं - यह तब आपकी प्रतिष्ठा अर्जित कर सकता है।
थोमसट्रेटर

के उपयोगी उपयोग RANDOM, मैं स्वीकार कर लिया!
पंड्या

1
ध्यान दें कि RANDOM% N एक समान वितरण में परिणाम नहीं देता है जब तक कि RANDOM (32768) के संभावित मानों की संख्या N से विभाज्य नहीं है। यह देखने के लिए, RANDOM की श्रेणी की कल्पना करें बजाय 0-4 (5 संभावित मान), और N 2 है: $ RANDOM% 2 के लिए 0 प्राप्त करने के लिए तीन तरीके हैं (यदि $ RANDOM 0, 2, 4 पैदावार देता है), लेकिन इसके लिए दो तरीके से 1 (1, 3) प्राप्त होता है। समान वितरण के लिए आपको N के सबसे बड़े गुणकों को ढूंढना होगा जो कि 32767 से छोटा हो और जो किसी भी यादृच्छिक मान को अनदेखा करता हो, जो उससे बड़ा हो। पिछले उदाहरण में जो 5 को नजरअंदाज करने की मात्रा है, जो 4 से बड़ा है।
डोभाल

@ डोवल मैंने कहा कि मेरे जवाब में, क्या आपने इसे देखा?
थोमसट्रेटर

@neon_overload मेरा बुरा, मैं उस बिट को याद किया।
डोभाल

7

@Neon_overload उत्तर (उपयोग करके RANDOM) के अनुसार ,
मैं RANDOMउदाहरण स्क्रिप्ट में निम्नानुसार (4 आदेशों के लिए) डाल सकता हूं :

#!/bin/bash
random_selection=$((RANDOM % 4))

case $random_selection in

  0)
  <command_1>
  ;;

  1)
  <command_2>
  ;;

  2)
  <command_3>
  ;;

  3)
  <command_4>
  ;;

esac

2

यदि आप अपने कंप्यूटर द्वारा उत्पन्न एक बाहरी साइट के माध्यम से यादृच्छिकता चाहते हैं, तो आप इस स्क्रिप्ट का उपयोग कर सकते हैं:

curl "http://www.random.org/integers/?num=1&min=$1&max=$2&col=1&base=10&format=plain&rnd=new"

रैंड (MIN) (MAX) के रूप में चलाएं (मान लें कि आप / usr / बिन / रैंड के रूप में सहेजें)

यदि पहले से स्थापित नहीं है, तो आपको पहले कर्ल स्थापित करना होगा (sudo apt-get install कर्ल)।


0

आप GNU कोरुटिल्सshuf से कमांड का उपयोग कर सकते हैं ।

NAME
       shuf - generate random permutations

SYNOPSIS
       shuf [OPTION]... [FILE]
       shuf -e [OPTION]... [ARG]...
       shuf -i LO-HI [OPTION]...

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

उदाहरण:

$ shuf -i 1-5
4
1
2
5
3

$ shuf -e Debian Ubuntu Trisquel 
Trisquel
Debian
Ubuntu

अब, एक यादृच्छिक प्रविष्टि प्राप्त करने के लिए आप -n 1पहली पंक्ति के आउटपुट का उपयोग कर सकते हैं ।

1-100 से यादृच्छिक संख्या को मुद्रित करने के लिए उदाहरण:

$ shuf -i 1-100 -n 1
37

यदि आप fileनिम्नलिखित सामग्री के साथ हैं:

$ cat file
command-1
command-2
command-3
command-4
command-5

आप कुछ ऐसा भी कर सकते हैं:

$ shuf file -n 1
command-3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.