source: vendor/bash/3.1-p17/examples/scripts.v2/bashrand

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

bash 3.1

File size: 1.6 KB
Line 
1#! /bin/bash
2# bashrand - generate a random number in a specified range with an
3# optionally specified ``seed'' value.
4#
5# Original Author: Peter Turnbull, May 1993
6
7usage()
8{
9 echo "$PROG: usage: $PROG [-s seed] lower-limit upper-limit" >&2
10}
11
12PROG=${0##*/}
13
14SEED=$$ # Initialize random-number seed value with PID
15
16while getopts s: opt
17do
18 case "$opt" in
19 s) SEED=$OPTARG ;;
20 *) usage ; exit 2 ;;
21 esac
22done
23
24shift $((OPTIND - 1))
25
26# Process command-line arguments:
27case $# in
28 2) Lower=$1; Upper=$2 ;;
29 *) usage ; exit 2 ;;
30esac
31
32# Check that specified values are integers:
33expr "$Lower" + 0 >/dev/null 2>&1 || {
34 echo "$PROG: lower ($Lower) not an integer" >&2
35 exit 1
36}
37
38expr "$Upper" + 0 >/dev/null 2>&1 || {
39 echo "$PROG: upper ($Upper) not an integer" >&2
40 exit 1
41}
42
43expr "$SEED" + 0 >/dev/null 2>&1 || {
44 echo "$PROG: seed ($SEED) not an integer" >&2
45 exit 1
46}
47
48# Check that values are in the correct range:
49(( $Lower < 0 )) || [ `expr "$Lower" : '.*'` -gt 5 ] && {
50 echo "$PROG: Lower limit ($Lower) out of range" >&2
51 exit 1
52}
53
54(( $Upper > 32767 )) || [ `expr "$Upper" : '.*'` -gt 5 ] && {
55 echo "$PROG: Upper limit ($Upper) out of range" >&2;
56 exit 1
57}
58
59(( $SEED < 0 )) || (( $SEED > 32767 )) || [ `expr "$SEED" : '.*'` -gt 5 ] && {
60 echo "$PROG: Seed value ($SEED) out of range (0 to 32767)" >&2
61 exit 1
62}
63
64(( $Upper <= $Lower )) && {
65 echo "$PROG: upper ($Upper) <= lower value ($Lower)" >&2
66 exit 1
67}
68
69# Seed the random-number generator:
70RANDOM=$SEED
71
72# Compute value, scaled within range:
73let rand="$RANDOM % ($Upper - $Lower + 1) + $Lower"
74
75# Report result:
76echo $rand
Note: See TracBrowser for help on using the repository browser.