В 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, вводять зміщення через нерівномірний розкол в діапазоні можливих значень.