How to select a random item from an array in shell
I'm creating a bot in Shell Script:
# Array with expressions
expressions=("Ploink Poink" "I Need Oil" "Some Bytes are Missing!" "Poink Poink" "Piiiip Beeeep!!" "Hello" "Whoops! I'm out of memmory!")
# Seed random generator
RANDOM=$$$(date +%s)
# Loop loop loop loop loop loop ...
while [ 1 ]
do
# Get random expression...
selectedexpression=${expressions[$RANDOM % ${#RANDOM[*]}]}
# Write to Shell
echo $selectedexpression
# Wait an half hour
sleep 1 # It's one second for debugging, dear SOers
done
I want that it prints a random item from the expressions
every second. I tried this but it does not work. It only prints the first one (Ploink Poink) every time. Can anyone help me out?
Thanks
Change the line where you define selectedexpression
to
selectedexpression=${expressions[ $RANDOM % ${#expressions[@]} ]}
You want your index into expression
to be a random number from 0 to the length of the expression
array. This will do that.
arr[0]="Ploink Poink"
arr[1]="I Need Oil"
arr[2]="Some Bytes are Missing!"
arr[3]="Poink Poink"
arr[4]="Piiiip Beeeep!!"
arr[5]="Hello"
arr[6]="Whoops! I'm out of memmory!"
rand=$[$RANDOM % ${#arr[@]}]
echo $(date)
echo ${arr[$rand]}
Here's another solution that may be a bit more random than Jacob Mattison's solution (hard to say from the jot
manpages):
declare -a expressions=('Ploink' 'I Need Oil' 'Some Bytes are Missing' 'Poink Poink' 'Piiiip Beeeep' 'Hello' 'Whoops I am out of memory')
index=$( jot -r 1 0 $((${#expressions[@]} - 1)) )
selected_expression=${expressions[index]}