aboutsummaryrefslogtreecommitdiff
path: root/bin/maybe.sh
diff options
context:
space:
mode:
Diffstat (limited to 'bin/maybe.sh')
-rw-r--r--bin/maybe.sh23
1 files changed, 23 insertions, 0 deletions
diff --git a/bin/maybe.sh b/bin/maybe.sh
new file mode 100644
index 00000000..6e5c8658
--- /dev/null
+++ b/bin/maybe.sh
@@ -0,0 +1,23 @@
+# Exit with success or failure with a given probability
+self=maybe
+
+# Figure out numerator and denominator from arguments
+case $# in
+ 0) num=1 den=2 ;;
+ 1) num=1 den=$1 ;;
+ 2) num=$1 den=$2 ;;
+ *)
+ printf >&2 '%s: Unexpected arguments\n' "$self"
+ exit 2
+ ;;
+esac
+
+# Numerator must be zero or greater, denominator must be 1 or greater
+if [ "$((num >= 0 || den >= 1))" -ne 1 ] ; then
+ printf >&2 '%s: Illegal numerator/denominator %s\n' "$self" "$num"
+ exit 2
+fi
+
+# Perform the test; that's our exit value
+seed=$(rnds)
+test "$(rndi 1 "$den" "$seed")" -le "$num"