How do I get randomness in command-line?

How to randomly execute one command within specified list of command? Helpful for randomly choosing startup sound, wallpaper or executing commands.

In General, if I have commands for execution as follows then How do I get randomness:?

#!/bin/bash
<command_1>
<command_2>
<command_3>
.
.
.
<command_n>

Then I want to execute randomly only one command from above possibilities when script is run!

How to do that?


Solution 1:

The variable $RANDOM (actually a bash function) returns a random number from 0 to 32767 inclusive.

You would typically want to limit its range by dividing it by some number and take its remainder, eg.

# output a random number 0 to 3
echo $((RANDOM % 4))

In this simplistic example it'll be very slightly biased for any divisor that doesn't divide equally into 32768 (eg, anything that isn't a power of two), but in your scenario I don't think you'd be troubled by a slight bias.

To pick a random file, you'd name your files something like:

file0.jpg
file1.jpg
file2.jpg
file3.jpg

And then you can pick a random one with

# output a random file from file0.jpg to file3.jpg
echo "file$((RANDOM % 4)).jpg"

Solution 2:

According to @neon_overload answer (using RANDOM),
I can put RANDOM in example script as follows (for 4 commands):

#!/bin/bash
random_selection=$((RANDOM % 4))

case $random_selection in

  0)
  <command_1>
  ;;

  1)
  <command_2>
  ;;

  2)
  <command_3>
  ;;

  3)
  <command_4>
  ;;

esac

Solution 3:

If you want randomness through an external site rather than one generated by your computer, you can use this script:

curl "http://www.random.org/integers/?num=1&min=$1&max=$2&col=1&base=10&format=plain&rnd=new"

Run as rand (MIN) (MAX) (assuming you save as /usr/bin/rand)

You might have to install curl first (sudo apt-get install curl) if it is not already installed.