# 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

## 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!