In kshBash, Zsh, Yash veya BusyBox sh:
[ "$RANDOM" -lt 3277 ] && do_stuff
RANDOMYukarı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_stuffasla 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 n32768 faktörler nedeniyle olası değerler aralığında düzensiz bölünme bir önyargı tanıtmak değildir.