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