74 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| # Originally
 | |
| #
 | |
| # From: bsh20858@news.fhda.edu (Brian S Hiles)
 | |
| # Newsgroups: comp.unix.shell
 | |
| # Subject: Re: getting random numbers
 | |
| # Date: 23 Jan 1997 23:27:30 GMT
 | |
| # Message-ID: <5c8s52$eif@tiptoe.fhda.edu>
 | |
| 
 | |
| # @(#) krand  Produces a random number within integer limits
 | |
| # "krand" Korn shell script generates a random number in a
 | |
| # specified range with an optionally specified ``seed'' value.
 | |
| # Author: Peter Turnbull, May 1993
 | |
| # Modified by: Becca Thomas, January 1994
 | |
| 
 | |
| # changed the optional third argument to a -s option, converted to
 | |
| # bash v2 syntax -- chet@po.cwru.edu
 | |
| 
 | |
| PROGNAME=${0##*/}
 | |
| USAGE="usage: $PROGNAME [-s seed] lower-limit upper-limit"
 | |
| 
 | |
| Seed=$$			# Initialize random-number seed value with PID
 | |
| 
 | |
| usage()
 | |
| {
 | |
| 	echo ${PROGNAME}: "$USAGE" >&2
 | |
| }
 | |
| 
 | |
| errexit()
 | |
| {
 | |
| 	echo ${PROGNAME}: "$@" >&2
 | |
| 	exit 1
 | |
| }
 | |
| 
 | |
| # Process command-line arguments:
 | |
| while getopts "s:" opt; do
 | |
| 	case "$opt" in
 | |
| 	s) Seed=$OPTARG ;;
 | |
| 	*) usage ; exit 2;;
 | |
| 	esac
 | |
| done
 | |
| 
 | |
| shift $(($OPTIND - 1))
 | |
| 
 | |
| case $# in
 | |
| 	2) Lower=$1; Upper=$2 ;;
 | |
| 	*) usage ; exit 2;;
 | |
| esac
 | |
| 
 | |
| # Check that specified values are integers:
 | |
| expr "$Lower" + 0 >/dev/null 2>&1
 | |
| [ $? -eq 2 ] && { errexit "lower ($Lower) not an integer"; }
 | |
| expr "$Upper" + 0 >/dev/null 2>&1
 | |
| [ $? -eq 2 ] && { errexit "upper ($Upper) not an integer"; }
 | |
| expr "$Seed" + 0 >/dev/null 2>&1
 | |
| [ $? -eq 2 ] && { errexit "seed ($Seed) not an integer"; }
 | |
| 
 | |
| # Check that values are in the correct range:
 | |
| if (( "$Lower" < 0 )) || [ ${#Lower} -gt 5 ]; then
 | |
| 	errexit "lower limit ($Lower) less than zero"
 | |
| fi
 | |
| if (( "$Upper" > 32767 )) || [ ${#Upper} -gt 5 ]; then
 | |
| 	errexit "upper limit ($Upper) greater than 32767"
 | |
| fi
 | |
| if (( "$Seed" < 0 )) || (( "$Seed" > 32767 )) || [ ${#Seed} -gt 5 ]; then
 | |
| 	errexit "seed value ($Seed) out of range (0 to 32767)"
 | |
| fi
 | |
| (( "$Upper" <= "$Lower" )) && errexit "upper limit ($Upper) <= lower limit ($Lower)"
 | |
| 
 | |
| # Seed the random-number generator:
 | |
| RANDOM=$Seed
 | |
| # Compute value, scaled within range:
 | |
| let rand="$RANDOM % ($Upper - $Lower + 1) + $Lower"
 | |
| # Report result:
 | |
| echo $rand
 | 
