Как получить случайность в командной строке?

Как случайным образом выполнить одну команду в указанном списке команд? Полезно для случайного выбора звука при запуске, обоев или выполнения команд.

В общем, если у меня есть команды для выполнения следующим образом, то Как я могу получить случайность:?

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

Тогда я хочу выполнить случайным образом только одну команду из указанных выше возможностей, когда скрипт запущен!

Как это сделать?

11
задан 7 July 2014 в 21:15

4 ответа

Переменная $RANDOM (на самом деле функция удара) возвращает случайное число от 0 до 32 767 включительно.

Вы обычно хотели бы ограничить его диапазон путем деления его на некоторое число и взять его остаток, например,

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

В этом упрощенном примере, это будет очень немного смещено для любого делителя, который не делится одинаково на 32 768 (например, что-либо, что не является питанием два), но в сценарии я не думаю, что Вы были бы обеспокоены небольшой предвзятостью.

Для выбора случайного файла Вы назвали бы свои файлы чем-то как:

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

И затем можно выбрать случайный с

# output a random file from file0.jpg to file3.jpg
echo "file$((RANDOM % 4)).jpg"
22
ответ дан 7 July 2014 в 21:15

Согласно ответу @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
7
ответ дан 7 July 2014 в 21:15

Если Вы хотите случайность через внешний сайт, а не один сгенерированный Вашим компьютером, можно использовать этот сценарий:

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

Выполнение как рэнд (МИН) (МАКС) (принимающий Вас сохраняют как/usr/bin/rand)

Вам, возможно, придется установить завихрение сначала (sudo склонный - получают завихрение установки), если это уже не установлено.

2
ответ дан 7 July 2014 в 21:15

Можно использовать shuf команда от GNU coreutils.

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
0
ответ дан 8 July 2014 в 08:15

Другие вопросы по тегам:

Похожие вопросы: