Сценарий генерации случайных чисел - PullRequest
7 голосов
/ 13 мая 2011

var=$RANDOM создает случайные числа, но как я могу указать диапазон, например, от 0 до 12?

Ответы [ 6 ]

11 голосов
/ 13 мая 2011

Если у вас уже есть случайное число, вы можете сказать

var=$RANDOM
var=$[ $var % 13 ]

чтобы получить числа от 0..12.

Edit: Если вы хотите произвести числа от $x до $y, вы можете легко изменить это:

var=$[ $x + $var % ($y + 1 - $x) ]
8 голосов
/ 13 мая 2011

От 0 до 12 (включено):

echo $((RANDOM % 13))

Редактировать : обратите внимание, что этот метод не является строго правильным. Поскольку 32768 не кратно 13, шансы на генерирование от 0 до 8 немного выше (0,04%), чем на оставшиеся числа (от 9 до 12).

Вот функция оболочки, которая должна давать сбалансированный вывод:

randomNumber()
{
  top=32768-$((32768%($1+1)))
  while true; do
    r=$RANDOM
    [ r -lt $top ] && break
  done
  echo $((r%$1))
}

Конечно, должно быть разработано что-то лучшее, если более высокое значение диапазона превышает 32767.

6 голосов
/ 13 мая 2011

Альтернатива с использованием shuf, доступная в linux (или, если быть точным, coreutils):

var=$(shuf -i0-12 -n1)
3 голосов
/ 13 мая 2011

Вот, пожалуйста,

echo $(( $RANDOM % 12 ))

Надеюсь, это поможет.

1 голос
/ 14 октября 2014

В FreeBSD и, возможно, в других BSD вы можете использовать:

jot -r 3 0 12

Это создаст 3 случайных чисел от 0 до 12 включительно.

Другой вариант, если вам нужно только одно случайное число на скрипт, вы можете сделать:

var=$(( $$ % 13 ))

Это будет использовать PID скрипта в качестве начального числа, которое должно быть в основном случайным. Диапазон снова будет от 0 до 12.

1 голос
/ 13 мая 2011

В этом документе есть несколько примеров использования, таких как RANGE и FLOOR, которые могут быть полезны: http://tldp.org/LDP/abs/html/randomvar.html

...