Как случайным образом выполнить одну команду в указанном списке команд? Полезно для случайного выбора звука при запуске, обоев или выполнения команд.
В общем, если у меня есть команды для выполнения следующим образом, то Как я могу получить случайность:?
#!/bin/bash
<command_1>
<command_2>
<command_3>
.
.
.
<command_n>
Тогда я хочу выполнить случайным образом только одну команду из указанных выше возможностей, когда скрипт запущен!
Как это сделать?
Переменная $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"
Согласно ответу @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
Если Вы хотите случайность через внешний сайт, а не один сгенерированный Вашим компьютером, можно использовать этот сценарий:
curl "http://www.random.org/integers/?num=1&min=$1&max=$2&col=1&base=10&format=plain&rnd=new"
Выполнение как рэнд (МИН) (МАКС) (принимающий Вас сохраняют как/usr/bin/rand)
Вам, возможно, придется установить завихрение сначала (sudo склонный - получают завихрение установки), если это уже не установлено.
Можно использовать 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