Скрипт генерации случайных чисел

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

6 ответов


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

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

чтобы получить номера от 0..12.

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

var=$[ $x + $var % ($y + 1 - $x) ]

между 0 и 12 (в комплекте):

echo $((RANDOM % 13))

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

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

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

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


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

var=$(shuf -i0-12 -n1)

держи

echo $(( $RANDOM % 12 ))

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


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


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

jot -r 3 0 12

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

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

var=$(( $$ % 13 ))

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