Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
#!/bin/bash
NBMAX=10
index=1
echo
echo "-----------------"
do
nombre=$RANDOM
echo $nombre
done
echo "-----------------"
# Si vous avez besoin d'un entier aléatoire dans une certaine échelle, utilisez
#+ l'opérateur 'modulo'.
ECHELLE=500
echo
nombre=$RANDOM
# ^^
echo
# Si vous avez besoin d'un entier aléatoire supérieur à une borne, alors
#+ faites un test pour annuler tous les nombres en dessous de cette borne.
PLANCHER=200
nombre=0 #initialise
do
nombre=$RANDOM
done
echo
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 1/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
nombre=0 #initialise
do
nombre=$RANDOM
done
echo
BINAIRE=2
T=1
nombre=$RANDOM
# Notez que let "nombre >>= 14" donne une meilleure distribution aléatoire
if [ "$nombre" -eq $T ]
then
echo "VRAI"
else
echo "FAUX"
fi
echo
die1=0
die2=0
echo
exit 0
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 2/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
#!/bin/bash
# pick-card.sh
# Ceci est un exemple pour choisir au hasard des éléments d'un tableau.
Suites="Carreau
Pique
Coeur
Trefle"
Denominations="2
10
Valet
Dame
Roi
As"
denomination=($Denominations)
num_denominations=${#denomination[*]}
echo ${suite[$((RANDOM%num_suites))]}
# $bozo sh pick-cards.sh
# Valet de trèfle
exit 0
#!/bin/bash
# brownian.sh
# License: GPL3
# ----------------------------------------------------------------
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 3/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
# ----------------------------------------------------------------
#+ of script.
do
Slots[$i]=0
done
Show_Slots () {
do
done
echo # Note that if the count within any particular slot exceeds 99,
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 4/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
case "$Move" in
1 ) ((POS--));; # Left.
2 ) ((POS++));; # Right.
esac
i=0
do
Move
((i++));
done
p=0
do
Play
(( p++ ))
done
# --------------
# main ()
Initialize_Slots
Run
Show_Slots
# --------------
exit $?
# Exercises:
# ---------
#+ a scattergram.
rnumber=$((RANDOM%25+6))
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 5/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
rnumber=$(((RANDOM%30/3+1)*3))
rnumber=$(( RANDOM%27/3*3+6 ))
rnumber=$(((RANDOM%(max-min+divisiblePar))/divisiblePar*divisiblePar+min))
#!/bin/bash
# random-between.sh
# Script par Bill Gradwohl, avec des modifications mineures par l'auteur du document.
aleatoireEntre() {
syntax() {
echo
echo
echo "Attend au plus trois paramètres mais tous sont complètement optionnels."
echo " c'est-à-dire qu'une réponse doit être divisible de manière entière"
echo
echo "Si cette valeur manque, l'aire par défaut supportée est : 0 32767 1"
echo "Les valeurs négatives pour tout paramètre passé sont gérées correctement."
local min=${1:-0}
local max=${2:-32767}
local divisiblePar=${3:-1}
# Valeurs par défaut affectées, au cas où les paramètres ne sont pas passés à la
#+ fonction.
local x
local spread
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 6/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
# Vérification.
syntax
return 1
fi
# Les inversez.
x=${min}
min=${max}
max=${x}
fi
min=$((min/divisiblePar*divisiblePar))
else
min=$((((min/divisiblePar)+1)*divisiblePar))
fi
fi
max=$((((max/divisiblePar)-1)*divisiblePar))
else
max=$((max/divisiblePar*divisiblePar))
fi
fi
# ---------------------------------------------------------------------
# Notez que pour obtenir une distribution correcte pour les points finaux,
#+ l'échelle des valeurs aléatoires doit être autorisée pour aller entre 0 et
#+ correctes mais le côté aléatoire des réponses est erroné dans le fait que le
#+ nombre de fois où les points finaux ($min et $max) sont renvoyés est
# ---------------------------------------------------------------------
spread=$((max-min))
let spread+=divisiblePar
aleatoireEntreAnswer=$(((RANDOM%spread)/divisiblePar*divisiblePar+min))
return 0
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 7/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
#+ la formule échoue.
# rnumber = $(((RANDOM%(max-min+1)+min)/divisiblePar*divisiblePar))
# Testons la fonction.
min=-14
max=20
divisiblePar=3
# Génère un tableau des réponses attendues et vérifie pour s'assurer que nous obtenons
declare -a reponse
minimum=${min}
maximum=${max}
minimum=$((minimum/divisiblePar*divisiblePar))
else
minimum=$((((minimum/divisiblePar)+1)*divisiblePar))
fi
fi
maximum=$((((maximum/divisiblePar)-1)*divisiblePar))
else
maximum=$((maximum/divisiblePar*divisiblePar))
fi
fi
#+ donc nous avons besoin d'un déplacement qui nous garantie des résultats positifs.
deplacement=$((0-minimum))
reponse[i+deplacement]=0
done
# Maintenant, bouclons avec un gros nombre de fois pour voir ce que nous obtenons.
# Notez que nous spécifions min et max en ordre inverse ici pour s'assurer que les
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 8/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
[ $((aleatoireEntreAnswer%${divisiblePar})) -ne 0 ] \
reponse[aleatoireEntreAnswer+deplacement]=$((reponse[aleatoireEntreAnswer+deplacement]+1))
done
[ ${reponse[i+deplacement]} -eq 0 ] \
done
exit 0
#!/bin/bash
#+ le PID du script.
PIPS=6 # Un dé a 6 faces.
compteur=0 # Compteur.
deux=0 # car une variable non initialisée est nulle, et ne vaut pas zéro.
trois=0
quatre=0
cinq=0
six=0
Affiche_resultat ()
echo
echo
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 9/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
mise_a_jour_compteur()
case "$1" in
esac
echo
do
mise_a_jour_compteur $die1
done
Affiche_resultat
exit 0
# Les scores devraient être distribués de façon égale en supposant que RANDOM
# Avec $COMPTEURMAX à 600, tout devrait tourner autour de 100, plus ou moins
#+ 20.
# Exercice (facile):
# -----------------
Exemple 9.31. Réinitialiser RANDOM
#!/bin/bash
nombres_aleatoires ()
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 10/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
compteur=0
do
nombre=$RANDOM
done
echo; echo
#+ aléatoires.
nombres_aleatoires
echo; echo
#+ "aléatoires" ?
echo; echo
echo; echo
#+ 'date'.
#+ pseudo-aléatoire),
RANDOM=$SEED
nombres_aleatoires
echo; echo
exit 0
Note
Le pseudo fichier périphérique /dev/urandom apporte une méthode pour générer des
nombres pseudo-aléatoires bien plus « aléatoires » que la variable $RANDOM. dd
if=/dev/urandom of=fichier_cible bs=1 count=XX crée
un fichier de nombres pseudo-
aléatoires bien distribués.
Néanmoins, assigner ces nombres à une variable dans un script
nécessite un petit travail supplémentaire, tel qu'un filtrage par
l'intermédiaire de od (comme
dans l'exemple ci-dessus, dans
l'Exemple 15.14,
« Générer des nombres aléatoires de dix
chiffres »
et dans Exemple A.38,
« Tri d'insertion ») ou tel que l'utilisation de
dd (voir
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 11/12
16/11/2021 00:33 9.6. $RANDOM : générer un nombre aléatoire
l'Exemple 15.59,
« Effacer les fichiers de façon sûre ») ou même
d'envoyer via un tube
dans md5sum (voir l'Exemple 33.14,
« Un jeu de « courses de
chevaux » »).
Il existe aussi
d'autres moyens pour générer des nombres pseudo aléatoires dans
un
script. Awk
propose une façon agréable de le faire.
Exemple 9.32. Nombres pseudo-aléatoires, en
utilisant awk
#!/bin/bash
exit 0
# Exercices :
# ----------
# différents.
# faire ?)
[40]
La graine d'une série de nombres pseudo-aléatoires
générés par un ordinateur peut être considérée
comme un label
d'identification. Par exemple, pensez à la série pseudo-aléatoire
avec une graine de 23
comme la série #23.
https://abs.traduc.org/abs-5.3-fr/ch09s06.html 12/12