[zsh] génération nombre (pseudo) aléatoire

Bonjour,

Voici pour l’instant mon script

[code]#!/bin/sh

script xkcd-url-gen

RAND=$(dd if=/dev/urandom count=1 status=noxfer | md5sum | cut -c 5-8 | tr ‘[a-z]’ ‘[A-Z]’ | bc)

RAND=$(($RAND%705))
RAND=$(($RAND+1))

echo “http://xkcd.com/${RAND}/

exit 0[/code]

Qui comme vous l’avez compris, dois me sortir une url aléatoire choisie dans une plage limitée de proposition.

Mon problème réside dans le fait que dd me fait une sortie intempestive :

1+0 enregistrements lus 1+0 enregistrements écrits http://xkcd.com/540/

J’ai tenté de résoudre en faisant la sortie sur /dev/null plutôt que la sortie standard (of=/dev/null), mais ça ne change rien, et en plus ça ne génère plus rien d’aléatoire.

Je me suis replié sur cette solution parce que la variable $RANDOM me sort un blanc… je ne sais pas si elle est passée de date, mais bon… Beaucoup de monde semble l’utiliser, je ne vois pas comment.

Si vous voyez un moyen d’utiliser $RANDOM, je suis partant.
Merci

Edit :
Résolu de moi-même, en trouvant des infos sur od (ce type est proprement illisible, autant voir le man, même si il grille quelques neurones parfoit… On se demande à quoi pense le traducteur lorsqu’il écrit […]Un opérande de
déplacement signifie -j SAUT. L’ÉTIQUETTE est la pseudo-adresse du premier octet affiché, elle est incrémentée lors de l’affichage.[…]

voici le script final (enfin, j’en ai finis de la génération d’url, mais il n’est pas terminé).

[code]#!/bin/sh

script xkcd-url-gen

RAND=$(dd if=/dev/urandom count=1 status=noxfer 2> /dev/null | od -N 512 -x | md5sum | cut -c 5-8 | tr ‘[a-z]’ ‘[A-Z]’ | bc)

RAND=$(($RAND%705))
RAND=$(($RAND+1))

echo “http://xkcd.com/${RAND}/

exit 0[/code]

Et la variable $RANDOM ne te plait pas ?

Si si elle me plait bien, et c’est la première chose que j’ai essayé.

Seulement,
RAND=$RANDOM

echo $RAND

me fait un blanc. J’ai tenté diverses syntaxes : je n’ai pas réussis à l’utiliser. Donc…

Très bizarre chez moi ça passe sans souci. Je ne vois pas ce qui peut poser problème.

Si tu fait echo “#$RAND#” il y a quelque chose entre les deux ?
Si tu fais echo $RANDOM il te donne quelque chose ?

Au pire tu peut faire RAND=$(echo $RANDOM), ça seras toujours plus léger que de lire /dev/random et de faire un md5 dessus.

Mmmmh… ça fonctionne :laughing:

[xkth@Nyarlathotep]:/home/xkth% echo “#$RAND#”

[xkth@Nyarlathotep]:/home/xkth% echo $RANDOM
18434
[xkth@Nyarlathotep]:/home/xkth% echo $RANDOM
24899
[xkth@Nyarlathotep]:/home/xkth% echo $RANDOM
1039
[xkth@Nyarlathotep]:/home/xkth% echo $RANDOM
14156
[xkth@Nyarlathotep]:/home/xkth% RAND=$(echo $RANDOM)
[xkth@Nyarlathotep]:/home/xkth% echo “#$RAND#”
#8715#
[xkth@Nyarlathotep]:/home/xkth% echo “#$RAND#”
#8715#
[xkth@Nyarlathotep]:/home/xkth%

Par contre, en script, ça ne fonctionne pas :

[code]RAND=$(echo $RANDOM)

echo $RANDOM
echo $RAND

RAND=$(($RAND%705))
RAND=$(($RAND+1))
[/code]

me donne :
[xkth@Nyarlathotep]:/home/xkth% xkcd-url-gen

/usr/bin/xkcd-url-gen: 9: arithmetic expression: expecting primary: “%705”
[xkth@Nyarlathotep]:/home/xkth%

Change le sheban il devrait être :