ในksh
, Bash, Zsh, Yash หรือ BusyBox sh
:
[ "$RANDOM" -lt 3277 ] && do_stuff
RANDOM
ตัวแปรพิเศษของ Korn, ทุบตี Yash, 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 in n ” $RANDOM
ซึ่งก็คือ[[ $RANDOM -lt $((32767 / n + 1)) ]]
ให้โอกาส (⎣32767 / n ⎦ + 1) ในโอกาส 32768 ค่าn
ที่ไม่ใช่ปัจจัยของ 32768 จะทำให้เกิดอคติเนื่องจากการแบ่งที่ไม่สม่ำเสมอในช่วงของค่าที่เป็นไปได้