Bash
如何在 Bash 中執行 N 次命令中的 1 次
我想要一種隨機執行命令的方法,比如 10 次中的 1 次。是否有內置或 GNU coreutil 來執行此操作,理想情況下是:
chance 10 && do_stuff
哪裡
do_stuff
只執行了 10 次?我知道我可以寫一個腳本,但這似乎是一件相當簡單的事情,我想知道是否有一個定義的方法。
在
ksh
、Bash、Zsh、Yash 或 BusyBox 中sh
:[ "$RANDOM" -lt 3277 ] && do_stuff
Korn、Bash、Yash、Z 和 BusyBox shell的
RANDOM
特殊變數在每次評估時都會產生一個介於 0 和 32767 之間的偽隨機十進制整數值,因此上述給出(接近)十分之一的機會。您可以使用它來生成一個行為如您的問題中所述的函式,至少在 Bash 中:
function chance { [[ -z $1 || $1 -le 0 ]] && return 1 [[ $RANDOM -lt $((32767 / $1 + 1)) ]] }
忘記提供參數或提供無效參數將產生結果 1,因此
chance && do_stuff
永遠不會do_stuff
。這使用了“ n中的 1 ”的通用公式
$RANDOM
,即[[ $RANDOM -lt $((32767 / n + 1)) ]]
,在 32768 中給出 (⎣32767 / n ⎦ + 1) 的機會。n
不是 32768 的因子的值會引入偏差,因為可能值範圍內的拆分不均勻。