21 lines
605 B
Bash
Executable File
21 lines
605 B
Bash
Executable File
#!/bin/bash
|
|
if ! [[ "$1" =~ ^[0-9]+$ ]]; then
|
|
echo "Usage: randint <positive integer> [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
|