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