From 65d4c3c3ff57276b9c7cdd8c726050fbe27bd699 Mon Sep 17 00:00:00 2001 From: deajan Date: Tue, 2 Oct 2018 11:37:46 +0200 Subject: [PATCH] Random generator improvements --- dev/ofunctions.sh | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/dev/ofunctions.sh b/dev/ofunctions.sh index 945bf95..dd738e8 100644 --- a/dev/ofunctions.sh +++ b/dev/ofunctions.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash ## Generic and highly portable bash functions written in 2013-2018 by Orsiris de Jong - http://www.netpower.fr - ozy@netpower.fr -#TODO: ExecTasks postponed arrays / files grow a lot. Consider having them "rolling" +#TODO: ExecTasks postponed arrays / files grow a lot. Consider having them "rolling" (cleaned at numberOfEvents) #TODO: command line arguments don't take -AaqV for example #################################################################################################################################################################### @@ -114,7 +114,31 @@ else fi #### PoorMansRandomGenerator SUBSET #### -# Get a random number on Windows BusyBox alike, also works on most Unixes +# Get a random number on Windows BusyBox alike, also works on most Unixes that have dd, if dd is not found, then return $RANDOM +function PoorMansRandomGenerator { + local digits="${1}" # The number of digits to generate + local number + local isFirst=true + + if type dd >/dev/null 2>&1; then + + # Some read bytes can't be used, se we read twice the number of required bytes + dd if=/dev/urandom bs=$digits count=2 2> /dev/null | while read -r -n1 char; do + if [ $isFirst == false ] || [ $(printf "%d" "'$char") != "0" ]; then + number=$number$(printf "%d" "'$char") + isFirst=false + fi + if [ ${#number} -ge $digits ]; then + echo ${number:0:$digits} + break; + fi + done + elif [ "$RANDOM" -ne 0 ]; then + echo $RANDOM + else + Logger "Cannot generate random number." "ERROR" + fi +} function PoorMansRandomGenerator { local digits="${1}" # The number of digits to generate local number