Est-il possible d'avoir une variable qui choisit un nombre aléatoire parmi trois nombres prédéterminés?
Échantillon:
var= 10 or 100 or 1000
Est-il possible d'avoir une variable qui choisit un nombre aléatoire parmi trois nombres prédéterminés?
Échantillon:
var= 10 or 100 or 1000
Réponses:
Utilisez un tableau pour contenir les valeurs et choisissez parmi celles-ci à l'aide de la variable intégrée $RANDOM
. Par exemple,
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 qualité de l'aléatoire ne sera pas la meilleure possible (lisez les octets /dev/urandom
pour cela), mais elle devrait être plus que suffisante pour un script.
Note 1: Comme les gens ont observé dans les commentaires, au lieu d'initialiser les éléments du tableau individuellement l' on peut bien sûr utiliser un tableau litéral: x=(10 100 1000)
.
Remarque 2: Au lieu de coder en dur le nombre d'éléments dans le tableau, un élément radom peut être extrait par ${x[$RANDOM%${#x[@]}]}
.
x=(10 100 1000)
crée un tableau à partir d'un littéral dans bash, ce serait plus lisible et plus idiomatique
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.
quelque chose comme ça?
Si vous utilisez bash (ou zsh ou ksh93 ), vous pouvez simplement faire:
echo "$((10**($RANDOM%3+1)))"
ou
var=$((10**($RANDOM%3+1)))
l'assigner à var
Vous pouvez également utiliser l' shuf
utilitaire GNU coreutils :
a=$(shuf -n1 -e 10 100 1000)
RANDOM
Cependant, l' utilisation selon les autres réponses est presque certainement plus rapide.
Voici une manière légèrement cryptique:
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
Cela attribuera la valeur aléatoire à $var
comme requis. La printf
chaîne de formatage est 1%0Nd
- cela entraîne 0
l'impression avec N
des zéros de tête, où N
sera un entier aléatoire dans l'intervalle [1,3]
.