Solución:
$(( ( RANDOM % 10 ) + 1 ))
EDITAR. Se cambiaron los corchetes a paréntesis según el comentario. http://web.archive.org/web/20150206070451/http://islandlinux.org/howto/generate-random-numbers-bash-scripting
La solución más simple sería utilizar una herramienta que le permita especificar directamente rangos, como gnu shuf
shuf -i1-10 -n1
Si quieres usar $RANDOM
, sería más preciso descartar los últimos 8 números en 0 … 32767, y simplemente tratarlo como 0 … 32759, ya que tomando 0 … 32767 mod 10 obtienes la siguiente distribución
0-8 each: 3277
8-9 each: 3276
Entonces, un poco más lento pero más preciso sería
while :; do ran=$RANDOM; ((ran < 32760)) && echo $(((ran%10)+1)) && break; done
Para generar números aleatorios con bash, use la función interna Bash $ RANDOM. Tenga en cuenta que $ RANDOM no debe utilizarse para generar una clave de cifrado. $ RANDOM se genera utilizando su ID de proceso actual (PID) y la hora / fecha actual según lo definido por el número de segundos transcurridos desde 1970.
echo $RANDOM % 10 + 1 | bc