Komut satırında rastgeleliği nasıl elde ederim?


11

Belirtilen komut listesinde bir komutu rasgele nasıl yürütürüm? Başlangıç ​​sesini, duvar kağıdını rastgele seçmek veya komutları yürütmek için yararlıdır.

Genel olarak, aşağıdaki gibi yürütme komutları varsa o zaman nasıl rasgele olsun :?

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

Sonra komut dosyası çalıştırıldığında yukarıdaki olasılıklardan sadece bir komut rastgele yürütmek istiyorum !

Bu nasıl yapılır?



Zaten olarak eklenen @Parto cevap önce
Pandya

Cevap vermeye çalışmıyordum, sadece kullanılabileceği bir örnek veriyordum.
Parto

Yanıtlar:


21

Değişken $RANDOM(aslında bash işlevi) 0 ile 32767 arasında rastgele bir sayı döndürür.

Genellikle bir sayıya bölerek aralığını sınırlamak ve geri kalanını almak istersiniz, örn.

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

Bu basit örnekte, 32768'e eşit olarak bölünmeyen herhangi bir bölen için çok hafif bir önyargıya sahip olacaksınız (örneğin, ikisinin gücü olmayan herhangi bir şey), ancak senaryonuzda sıkıntı çekeceğinizi düşünmüyorum hafif bir önyargı ile.

Rasgele bir dosya seçmek için dosyalarınıza şöyle bir ad verebilirsiniz:

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

Ve sonra rastgele bir tane seçebilirsiniz

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

1
Kendi cevabınız olarak göndermek isteyebilirsiniz - o zaman size itibar kazandırabilir.
thomasrutter

yararlı kullanımı RANDOM, kabul ettim!
Pandya

1
RANDOM% N'nin olası RANDOM (32768) değerlerinin sayısı N ile bölünmediği sürece eşit bir dağılımla sonuçlanmadığını unutmayın. Bunu görmek için RANDOM aralığının yerine 0-4 (5 olası değer) olduğunu ve N 2'dir: $ RANDOM% 2'nin 0 vermesi için üç yol vardır ($ RANDOM 0, 2, 4 verirse) ancak 1 (1, 3) vermesi için iki yol vardır. Eşit bir dağıtım için, N'nin 32767'den daha küçük olan en büyük katını bulmanız ve bundan daha büyük olan rastgele değerleri görmezden gelmeniz gerekir. Önceki örnekte, 4'ten büyük 5'i görmezden gelme anlamına gelir
Doval

@ Düşündüm ki cevabımda, gördün mü?
thomasrutter

@neon_overload Benim hatam, o kısmı özledim.
Doval

7

@Neon_overload cevabına göre (kullanarak RANDOM), aşağıdaki gibi örnek komut dosyası
koyabilirim RANDOM(4 komut için):

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

case $random_selection in

  0)
  <command_1>
  ;;

  1)
  <command_2>
  ;;

  2)
  <command_3>
  ;;

  3)
  <command_4>
  ;;

esac

2

Bilgisayarınız tarafından oluşturulan bir site yerine harici bir site aracılığıyla rasgelelik istiyorsanız, bu komut dosyasını kullanabilirsiniz:

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

Rand (MIN) (MAX) olarak çalıştır (/ usr / bin / rand olarak kaydettiğinizi varsayarsak)

Önceden yüklenmemişse, önce curl (sudo apt-get install curl) yüklemeniz gerekebilir.


0

GNU coreutilsshuf komutunu kullanabilirsiniz .

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

Misal:

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

$ shuf -e Debian Ubuntu Trisquel 
Trisquel
Debian
Ubuntu

Şimdi, bir rastgele giriş elde etmek için -n 1ilk satırı hangi çıkışları kullanabilirsiniz .

1-100 arası rastgele sayı yazdırma örneği:

$ shuf -i 1-100 -n 1
37

fileAşağıdaki içeriğe sahipseniz :

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

Ayrıca şöyle bir şey yapabilirsiniz:

$ shuf file -n 1
command-3
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.