Useful-scripts/randint.sh

18 lines
486 B
Bash
Executable File

#!/bin/bash
if ! [[ "$1" =~ ^[0-9]+$ ]]; then
echo "Usage: randint <positive integer>"
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 )
}')
random_num=$(xxd -p -l $ceiling /dev/urandom | tr -d '\n' | \
awk -v max="$number" -v scale="$ceiling" '{
val = strtonum("0x" $0);
range = 2**(scale*8);
print int(val * max / range)
}')
echo $random_num