When coding Bash scripts – especially when developing scripts for functionality testing – we sometimes need to generate a random number or random input. These numbers may also need to be within a specific range. This article will teach you how to perform random number generation in Bash.
In this tutorial you will learn:
- How to generate random numbers in Bash
- How to generate random numbers is a specific range
- Examples demonstrating random number generation in Bash
Software requirements and conventions used
Category | Requirements, Conventions or Software Version Used |
---|---|
System | Linux Distribution-independent |
Software | Bash command line, Linux based system |
Conventions | # – requires linux-commands to be executed with root privileges either directly as a root user or by use of sudo command$ – requires linux-commands to be executed as a regular non-privileged user |
Example 1: Generating a random number using the random generator
Let’s generate a random number in Bash:
$ echo $RANDOM 24758 $ echo $RANDOM 13
That was simple wasn’t it?
There are a few challenges with this approach though; it is not very usable as it stands: the random number could be 1
or 32000
. Also noteworthy is that whilst the returned number seems random, it is actually influenced by how the random entropy variable (RANDOM=
) is initialized. This will be the focus for another article. A quick example of how you can make it more random would be;
$ RANDOM=1 $ echo $RANDOM 16807 $ RANDOM=1 $ echo $RANDOM 16807 $ RANDOM=$(date +%s%N | cut -b10-19) $ echo $RANDOM 18991 $ RANDOM=$(date +%s%N | cut -b10-19) $ echo $RANDOM 11045
Note that the random number 16807
is not really that random, as the random generator was seeded with the same 1
.
The RANDOM=$(date +%s%N | cut -b10-19)
command is a much better random generator entropy seeder based on second and nanosecond time.
Example 2: Numbers in a range
Selecting random numbers in a range is simple. Let’s generate a random number between 1 and 113:
$ echo $(( $RANDOM % 113 + 1 )) 50 $ echo $(( $RANDOM % 113 + 1 )) 17 $ echo $(( $RANDOM % 113 + 1 )) 95
And we can also use an alternative syntax/command. This time we will generate a random number between 1 and 117:
$ echo $[ $RANDOM % 117 + 1 ] 113 $ echo $[ $RANDOM % 117 + 1 ] 71 $ echo $[ $RANDOM % 117 + 1 ] 10
To increase the minimum of a given range, you can simply increase the +1
to a higher number.
Please consider the following example, generating a random number between 11 and 30:
$ echo $[ $RANDOM % 20 + 11 ] 21
Conclusion
In this article, we learned how to generate a random number in Bash, in any preferred range. We also touched briefly on how randomness in Bash works via an entropy seed initialized random generator.
Show us some of your $RANDOM
creations in the comments below! Enjoy!