#! /bin/bash # bashrand - generate a random number in a specified range with an # optionally specified ``seed'' value. # # Original Author: Peter Turnbull, May 1993 usage() { echo "$PROG: usage: $PROG [-s seed] lower-limit upper-limit" >&2 } PROG=${0##*/} SEED=$$ # Initialize random-number seed value with PID while getopts s: opt do case "$opt" in s) SEED=$OPTARG ;; *) usage ; exit 2 ;; esac done shift $((OPTIND - 1)) # Process command-line arguments: case $# in 2) Lower=$1; Upper=$2 ;; *) usage ; exit 2 ;; esac # Check that specified values are integers: expr "$Lower" + 0 >/dev/null 2>&1 || { echo "$PROG: lower ($Lower) not an integer" >&2 exit 1 } expr "$Upper" + 0 >/dev/null 2>&1 || { echo "$PROG: upper ($Upper) not an integer" >&2 exit 1 } expr "$SEED" + 0 >/dev/null 2>&1 || { echo "$PROG: seed ($SEED) not an integer" >&2 exit 1 } # Check that values are in the correct range: (( $Lower < 0 )) || [ `expr "$Lower" : '.*'` -gt 5 ] && { echo "$PROG: Lower limit ($Lower) out of range" >&2 exit 1 } (( $Upper > 32767 )) || [ `expr "$Upper" : '.*'` -gt 5 ] && { echo "$PROG: Upper limit ($Upper) out of range" >&2; exit 1 } (( $SEED < 0 )) || (( $SEED > 32767 )) || [ `expr "$SEED" : '.*'` -gt 5 ] && { echo "$PROG: Seed value ($SEED) out of range (0 to 32767)" >&2 exit 1 } (( $Upper <= $Lower )) && { echo "$PROG: upper ($Upper) <= lower value ($Lower)" >&2 exit 1 } # Seed the random-number generator: RANDOM=$SEED # Compute value, scaled within range: let rand="$RANDOM % ($Upper - $Lower + 1) + $Lower" # Report result: echo $rand