É possível ter uma variável que escolhe um número aleatório entre três números pré-decididos?
Amostra:
var= 10 or 100 or 1000
É possível ter uma variável que escolhe um número aleatório entre três números pré-decididos?
Amostra:
var= 10 or 100 or 1000
Respostas:
Use uma matriz para armazenar os valores e escolha entre eles usando a variável interna $RANDOM
. Por exemplo,
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
A qualidade da aleatoriedade não será a melhor possível (leia os bytes /dev/urandom
para isso), mas deve ser mais do que suficiente para um script.
Nota 1: Como as pessoas têm observado nos comentários, em vez de inicializar os elementos da matriz individualmente uma lata, claro, usar um Litteral array: x=(10 100 1000)
.
Nota 2: Em vez de codificar o número de elementos na matriz, um elemento radom pode ser extraído por ${x[$RANDOM%${#x[@]}]}
.
x=(10 100 1000)
cria uma matriz de um literal em bash, isso seria mais legível e mais idiomática
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 assim?
Se você estiver usando o bash (ou zsh ou ksh93 ), basta fazer o seguinte:
echo "$((10**($RANDOM%3+1)))"
ou
var=$((10**($RANDOM%3+1)))
atribuí-lo a var
Você também pode usar o shuf
utilitário GNU coreutils :
a=$(shuf -n1 -e 10 100 1000)
Usar RANDOM
conforme as outras respostas é quase certamente mais rápido.
Aqui está uma maneira um pouco enigmática:
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
Isso atribuirá o valor aleatório $var
conforme necessário. A printf
string de formato é 1%0Nd
- isso faz 0
com que seja impresso com N
zeros à esquerda, onde N
haverá um número inteiro aleatório no intervalo [1,3]
.