#!/usr/bin/ksh93
################################################################
function usagemsg_mkrandstr {
print ""
print "Program: mkrandstr"
print ""
print "This script generates a random string of characters"
print ""
print "Usage: ${1##*/} [-?] [-v] [-V] [-m minimum] [-x maximum]"
print ""
print " Where '-m minimum' = Specify the minimum number of characters"
print " to be returned in the random string (Default:10)"
print " '-x maximum' = Specify the maximum number of characters"
print " to be returned in the random string (Default:10)"
print " '-l' = Only return lower case characters in random string"
print " '-u' = Only return upper case characters in random string"
print " '-v' = Verbose mode"
print " '-V' = Very Verbose Mode"
print ""
print "Author: Dana French (dfrench@mtxia.com)"
print ""
print "\"AutoContent\" enabled"
print ""
}
################################################################
function mkrandstr {
typeset TRUE="1"
typeset FALSE="0"
typeset EXITCODE="0"
typeset VERBOSE="${FALSE}"
typeset VERYVERB="${FALSE}"
typeset MIN="10"
typeset MAX="${MIN}"
typeset MAXLEN="10"
typeset POSCNT
typeset RANDSTR
typeset CNUM="52"
typeset CHARS
CHARS=( a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z )
while getopts ":vVulm:x:" OPTION
do
case "${OPTION}" in
'v') VERBOSE="${TRUE}";;
'V') VERYVERB="${TRUE}";;
'm') MIN="${OPTARG}";;
'x') MAX="${OPTARG}";;
'u') typeset -u CHARS;;
'l') typeset -l CHARS;;
'?') usagemsg_mkrandstr "${0}" && exit 1 ;;
esac
done
shift $(( ${OPTIND} - 1 ))
trap "usagemsg_mkrandstr ${0}" EXIT
if (( MAX < MIN ))
then
print -u 2 "ERROR: MIN (${MIN}) is greater than MAX (${MAX})"
exit 2
fi
trap "-" EXIT
(( VERYVERB == TRUE )) && set -x
################################################################
(( VERBOSE == TRUE )) && print -u 2 "Min length of random string: ${MIN}"
(( VERBOSE == TRUE )) && print -u 2 "Max length of random string: ${MAX}"
####
#### Calculate a random length for the random string between the
#### MIN and MAX values provided
####
(( MAX != MIN )) && (( MAX++ ))
(( MIN == MAX )) &&
MAXLEN=${MIN} ||
MAXLEN=$(( MIN + ( RANDOM % ( MAX - MIN ) ) ))
(( VERBOSE == TRUE )) && print -u 2 "Act length of random string: ${MAXLEN}"
####
#### extract a random character from the CHARS array for each position
#### of the random string. The length of the random string determined by
#### the MAXLEN variable.
####
for (( POSCNT=0; POSCNT < MAXLEN; ++POSCNT ))
do
####
#### Using the modulo of a random number divided by the number of
#### characters (array elements) in the CHARS array, provides a
#### random array element position. The random array element position
#### is used to append a single character at a time from the CHARS array
#### onto the random string variable RANDSTR.
####
RANDSTR="${RANDSTR}${CHARS[${RANDOM}%${CNUM}]}"
(( VERBOSE == TRUE )) && print -u 2 "Intermediate value ($(( ${POSCNT} + 1 ))) of random string: ${RANDSTR}"
done
print ${RANDSTR}
return ${EXITCODE}
}
################################################################
mkrandstr "${@}"