В ksh
Bash, Zsh, Yash или BusyBox sh
:
[ "$RANDOM" -lt 3277 ] && do_stuff
RANDOM
Специальная переменная Корн, Bash, Яш, Z и BusyBox оболочек производит псевдослучайное десятичное целое число в диапазоне от 0 до 32767 каждый раз , когда она оценена, так что выше , дает (близко к) на один из десяти случайно.
Вы можете использовать это для создания функции, которая ведет себя так, как описано в вашем вопросе, по крайней мере, в Bash:
function chance {
[[ -z $1 || $1 -le 0 ]] && return 1
[[ $RANDOM -lt $((32767 / $1 + 1)) ]]
}
Если вы забудете предоставить аргумент или предоставите неверный аргумент, результат будет равен 1, поэтому chance && do_stuff
никогда не будет do_stuff
.
При этом используется общая формула для «1 в n » с использованием $RANDOM
, которая [[ $RANDOM -lt $((32767 / n + 1)) ]]
дает (⎣32767 / n ⎦ + 1) с вероятностью 32768. Значения, n
которые не являются факторами 32768, вносят смещение из-за неравномерного разделения диапазона возможных значений.