mirror of https://github.com/tLDP/LDP
62 lines
1.4 KiB
Bash
62 lines
1.4 KiB
Bash
#!/bin/bash
|
|
# seeding-random.sh: Seeding the RANDOM variable.
|
|
# v 1.1, reldate 09 Feb 2013
|
|
|
|
MAXCOUNT=25 # How many numbers to generate.
|
|
SEED=
|
|
|
|
random_numbers ()
|
|
{
|
|
local count=0
|
|
local number
|
|
|
|
while [ "$count" -lt "$MAXCOUNT" ]
|
|
do
|
|
number=$RANDOM
|
|
echo -n "$number "
|
|
let "count++"
|
|
done
|
|
}
|
|
|
|
echo; echo
|
|
|
|
SEED=1
|
|
RANDOM=$SEED # Setting RANDOM seeds the random number generator.
|
|
echo "Random seed = $SEED"
|
|
random_numbers
|
|
|
|
|
|
RANDOM=$SEED # Same seed for RANDOM . . .
|
|
echo; echo "Again, with same random seed ..."
|
|
echo "Random seed = $SEED"
|
|
random_numbers # . . . reproduces the exact same number series.
|
|
#
|
|
# When is it useful to duplicate a "random" series?
|
|
|
|
echo; echo
|
|
|
|
SEED=2
|
|
RANDOM=$SEED # Trying again, but with a different seed . . .
|
|
echo "Random seed = $SEED"
|
|
random_numbers # . . . gives a different number series.
|
|
|
|
echo; echo
|
|
|
|
# RANDOM=$$ seeds RANDOM from process id of script.
|
|
# It is also possible to seed RANDOM from 'time' or 'date' commands.
|
|
|
|
# Getting fancy...
|
|
SEED=$(head -1 /dev/urandom | od -N 1 | awk '{ print $2 }'| sed s/^0*//)
|
|
# Pseudo-random output fetched
|
|
#+ from /dev/urandom (system pseudo-random device-file),
|
|
#+ then converted to line of printable (octal) numbers by "od",
|
|
#+ then "awk" retrieves just one number for SEED,
|
|
#+ finally "sed" removes any leading zeros.
|
|
RANDOM=$SEED
|
|
echo "Random seed = $SEED"
|
|
random_numbers
|
|
|
|
echo; echo
|
|
|
|
exit 0
|