ฉันจะได้รับการสุ่มในบรรทัดคำสั่งได้อย่างไร


11

วิธีการสุ่มรันคำสั่งหนึ่งคำสั่งภายในรายการคำสั่งที่ระบุ? มีประโยชน์สำหรับการเลือกเสียงเริ่มต้นวอลเปเปอร์หรือคำสั่งการดำเนินการแบบสุ่ม

โดยทั่วไปถ้าฉันมีคำสั่งสำหรับการดำเนินการดังต่อไปนี้ฉันจะสุ่มได้อย่างไร:?

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

จากนั้นฉันต้องการที่จะรันคำสั่งเดียวแบบสุ่มจากความเป็นไปได้ด้านบนเมื่อรันสคริปต์!

ทำอย่างไร


ตัวอย่างในทางปฏิบัติ: askubuntu.com/a/257471/163331
Parto

@Parto ฉันได้เพิ่มคำตอบก่อนหน้านี้แล้ว
Pandya

ฉันไม่ได้พยายามตอบก็แค่ยกตัวอย่างที่สามารถใช้ได้
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
คุณอาจต้องการโพสต์เป็นคำตอบของคุณเอง - จากนั้นอาจทำให้คุณมีชื่อเสียง
thomasrutter

การใช้งานที่เป็นประโยชน์ของRANDOMฉันได้รับการยอมรับ!
Pandya

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
Doval

@Doval ฉันพูดว่าในคำตอบของฉันคุณเห็นมัน?
thomasrutter

@neon_overload ฉันไม่ดีฉันพลาดบิตนั้นไป
Doval

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"

Run as rand (MIN) (MAX) (สมมติว่าคุณบันทึกเป็น / usr / bin / rand)

คุณอาจต้องติดตั้ง curl ก่อน (sudo apt-get install curl) หากยังไม่ได้ติดตั้ง


0

คุณสามารถใช้shufคำสั่งจากcoreutils GNU

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.