Generating Random Numbers In Bash With Examples

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

Generating Random Numbers In Bash With Examples

Generating Random Numbers In Bash With Examples

Software requirements and conventions used

Software Requirements and Linux Command Line Conventions
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!



Comments and Discussions
Linux Forum