Variable elegida al azar entre tres números (10, 100 y 1000)


19

¿Es posible tener una variable que elija un número aleatorio de tres números predeterminados?

Muestra:

var= 10 or 100 or 1000

1
No programo en UNIX, por lo que no puedo escribir el código, pero aquí hay otro enfoque: val = left ("1000", length = Random 2 a 4). Para tener tres valores no relacionados, el código sería similar.
Sensii Miller

Respuestas:


31

Use una matriz para contener los valores y elija entre ellos usando la variable incorporada $RANDOM. Por ejemplo,

x[0]=10     # One decade
x[1]=100    # One century
x[2]=1000   # One millennium

for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10

La calidad de la aleatoriedad no será la mejor posible (lea los bytes /dev/urandompara eso), pero debería ser más que suficiente para un script.

Nota 1: Como ya se ha observado en los comentarios, en lugar de inicializar los elementos de la matriz de forma individual una lata de utilizar un curso Litteral matriz: x=(10 100 1000).

Nota 2: en lugar de codificar el número de elementos en la matriz, se puede extraer un elemento Radom ${x[$RANDOM%${#x[@]}]}.


55
+1 Si bien la respuesta de zeppelin es inteligente en este caso particular, el enfoque de matriz es mucho más general.
Kamil Maciorowski

44
Parece que x=(10 100 1000)crea una matriz de un literal en bash, esto sería más legible y más idiomático
gato

1
@cat: La opinión sobre la legibilidad varía. Me gusta poner elementos individuales en líneas separadas, generalmente con comentarios finales que explican el valor.
AlexP

@AlexP Oh, supongo que no comentaría si pensara que fue a propósito. bastante justo
gato

1
@AlexP x[0]=10 # This sets the first value of x to ten. Ten is the number of fingers that humans have (excepting birth defects or mutilation). It is also the sum of 9 and 1, or product of 5 and 2. Ten is not prime. A traditional Christmas gift is ten lords a-leaping.algo así?
Nick T

30

Si está utilizando bash (o zsh o ksh93 ) puede hacer lo siguiente:

echo "$((10**($RANDOM%3+1)))"

o

var=$((10**($RANDOM%3+1)))

para asignarlo a var


:). Fácil cuando lo ves, pero no lo hice. ¡¡Gracias!!
Espen Larsen


8
case $(( RANDOM % 3 )) in
    0)
        var=10
        ;;
    1)
        var=100
        ;;
    2)
        var=1000
        ;;
esac

5

Aquí hay una forma ligeramente críptica:

printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0

Esto asignará el valor aleatorio a $varlo requerido. La printfcadena de formato es 1%0Nd: esto hace 0que se imprima con Nceros a la izquierda, donde Nhabrá un número entero aleatorio en el intervalo [1,3].

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.