In ksh
Bash, Zsh, Yash veya BusyBox sh
:
[ "$RANDOM" -lt 3277 ] && do_stuff
RANDOM
Yukarıdaki (yakın) bir tek-in-on şans verir böylece Korn Bash Yash, Z ve BusyBox kabukları özel değişken 0 ile 32767 değerlendirilen var arasında her zaman bir sözde rastgele ondalık tamsayı değeri üretir.
Sorunuzda, en azından Bash'de açıklandığı gibi davranan bir işlev üretmek için bunu kullanabilirsiniz:
function chance {
[[ -z $1 || $1 -le 0 ]] && return 1
[[ $RANDOM -lt $((32767 / $1 + 1)) ]]
}
Bir argüman vermeyi unutmak ya da geçersiz bir argüman sağlamak 1 sonucunu üretecektir, bu yüzden chance && do_stuff
asla olmayacaktır do_stuff
.
Bu, “1 in n ” için genel formülü kullanır $RANDOM
, yani [[ $RANDOM -lt $((32767 / n + 1)) ]]
32768'de bir (⎣32767 / n ⎦ + 1) verir. Değerleri n
32768 faktörler nedeniyle olası değerler aralığında düzensiz bölünme bir önyargı tanıtmak değildir.