#!/bin/bash if ! [[ "$1" =~ ^[0-9]+$ ]]; then echo "Usage: randint [fast]" exit 1 fi number=$1 ceiling=$(echo "l($number +1)/l(2)" | bc -l | awk '{ bits = ($1 == int($1)) ? $1 : int($1) + 1; print int( (bits + 7) / 8 ) }') if [[ "$2" == "fast" ]]; then random_num=$(xxd -p -l $ceiling /dev/urandom | tr -d '\n' | awk -v num="$number+1" '{print strtonum("0x" $0) % num}') else while :; do random_num=$(xxd -p -l $ceiling /dev/urandom | tr -d '\n' | awk '{print strtonum("0x" $0)}') (( random_num < number )) && break done fi echo $random_num