source: vendor/bash/3.1-p17/examples/scripts/krand.bash

Last change on this file was 3228, checked in by bird, 18 years ago

bash 3.1

File size: 1.9 KB
Line 
1# Originally
2#
3# From: bsh20858@news.fhda.edu (Brian S Hiles)
4# Newsgroups: comp.unix.shell
5# Subject: Re: getting random numbers
6# Date: 23 Jan 1997 23:27:30 GMT
7# Message-ID: <5c8s52$eif@tiptoe.fhda.edu>
8
9# @(#) krand Produces a random number within integer limits
10# "krand" Korn shell script generates a random number in a
11# specified range with an optionally specified ``seed'' value.
12# Author: Peter Turnbull, May 1993
13# Modified by: Becca Thomas, January 1994
14
15# changed the optional third argument to a -s option, converted to
16# bash v2 syntax -- chet@po.cwru.edu
17
18PROGNAME=${0##*/}
19USAGE="usage: $PROGNAME [-s seed] lower-limit upper-limit"
20
21Seed=$$ # Initialize random-number seed value with PID
22
23usage()
24{
25 echo ${PROGNAME}: "$USAGE" >&2
26}
27
28errexit()
29{
30 echo ${PROGNAME}: "$@" >&2
31 exit 1
32}
33
34# Process command-line arguments:
35while getopts "s:" opt; do
36 case "$opt" in
37 s) Seed=$OPTARG ;;
38 *) usage ; exit 2;;
39 esac
40done
41
42shift $(($OPTIND - 1))
43
44case $# in
45 2) Lower=$1; Upper=$2 ;;
46 *) usage ; exit 2;;
47esac
48
49# Check that specified values are integers:
50expr "$Lower" + 0 >/dev/null 2>&1
51[ $? -eq 2 ] && { errexit "lower ($Lower) not an integer"; }
52expr "$Upper" + 0 >/dev/null 2>&1
53[ $? -eq 2 ] && { errexit "upper ($Upper) not an integer"; }
54expr "$Seed" + 0 >/dev/null 2>&1
55[ $? -eq 2 ] && { errexit "seed ($Seed) not an integer"; }
56
57# Check that values are in the correct range:
58if (( "$Lower" < 0 )) || [ ${#Lower} -gt 5 ]; then
59 errexit "lower limit ($Lower) less than zero"
60fi
61if (( "$Upper" > 32767 )) || [ ${#Upper} -gt 5 ]; then
62 errexit "upper limit ($Upper) greater than 32767"
63fi
64if (( "$Seed" < 0 )) || (( "$Seed" > 32767 )) || [ ${#Seed} -gt 5 ]; then
65 errexit "seed value ($Seed) out of range (0 to 32767)"
66fi
67(( "$Upper" <= "$Lower" )) && errexit "upper limit ($Upper) <= lower limit ($Lower)"
68
69# Seed the random-number generator:
70RANDOM=$Seed
71# Compute value, scaled within range:
72let rand="$RANDOM % ($Upper - $Lower + 1) + $Lower"
73# Report result:
74echo $rand
Note: See TracBrowser for help on using the repository browser.