Comment générer des nombres aléatoires sous bash ?

Comment générer des nombres aléatoires sous bash ? - Linux et OS Alternatifs

Marsh Posté le 10-06-2004 à 19:05:46    

NOUVEAU
Comment générer des nombres aléatoires sous bash ?
man rand m'envoi sur le man se ssh
et rien d'autre disponible :(
 
ANCIEN
Comment en bash
faire une copie de fichier mais incrémenter si le fichier existe dans le répertoire de destination ?
 
man cp ne donne rien :??:


Message édité par jjgan le 11-06-2004 à 11:47:20

---------------
Qui suis-je ? Que fais-je ? | phpLister | Perdu ? Vous êtes ici --> *
Reply

Marsh Posté le 10-06-2004 à 19:05:46   

Reply

Marsh Posté le 10-06-2004 à 19:36:41    

un script :??:


---------------
Fais le ou ne le fais pas, mais il n'y a pas d'essai !!!
Reply

Marsh Posté le 10-06-2004 à 22:55:57    

sinon comment via bash générer un nombre aléatoire entre deux bornes ?


---------------
Qui suis-je ? Que fais-je ? | phpLister | Perdu ? Vous êtes ici --> *
Reply

Marsh Posté le 11-06-2004 à 11:47:32    

up (cf 1er post)


---------------
Qui suis-je ? Que fais-je ? | phpLister | Perdu ? Vous êtes ici --> *
Reply

Marsh Posté le 11-06-2004 à 11:55:30    

echo $RANDOM ;)

Reply

Marsh Posté le 11-06-2004 à 15:50:22    

ok merci, pas de bornes possible ?
sinon pas grave je ferai un modulo avec "expr" ;)


---------------
Qui suis-je ? Que fais-je ? | phpLister | Perdu ? Vous êtes ici --> *
Reply

Marsh Posté le 02-07-2004 à 15:24:29    

sinon, typiquement pour generer un fichier temporaire unique, utilise la commande mktemp.

Reply

Marsh Posté le 02-07-2004 à 16:55:38    

Pour avoir de l'aide sur RANDOM => man bash

Reply

Marsh Posté le 17-07-2004 à 08:53:27    

ArSuniK a écrit :

Pour avoir de l'aide sur RANDOM => man bash


et lorsque je fais un  
man random, je tombe sur la page 3 du manuel, donc cela parle de la commande C

Reply

Marsh Posté le 17-07-2004 à 09:03:07    

sinon j'ai reussi a recuperer un script sur le net.  

Code :
  1. :
  2. ##########################################################################
  3. # Shellscript: rand - return random number
  4. # Author     : Heiner Steven <heiner.steven@odn.de>
  5. # Date       : 1995-09-02
  6. # Requires   : bc, od
  7. # Category   : Desktop
  8. # SCCS-Id.   : @(#) rand 1.9 02/07/17
  9. ##########################################################################
  10. # Description
  11. #    o Prints a random number. Uses existing /dev/urandom for good
  12. # random numbers, otherwise date and time is used.
  13. #    o If /dev/urandom is available, arbitrary large random numbers
  14. # are supported.
  15. #
  16. # Notes
  17. #    o $Max should be used to find out, how many byte should be
  18. # read from /dev/urandom
  19. #
  20. # Changes
  21. # 1995-09-28 stv Random numbers cannot be maxvalue+1 (0.2)
  22. # 2000-01-28 stv numbers were too sequential (because of seconds) (1.2)
  23. # 2001-12-07 stv use $RANDOM variable, if present (1.3)
  24. # 2002-07-01 stv use /dev/urandom, if present (1.4)
  25. # 2002-07-02 stv fixed bug (numbers were always multiple of 256) (1.5)
  26. # 2002-07-16 stv random numbers were not evenly distributed (1.8)
  27. ##########################################################################
  28. PN=`basename "$0"`   # program name
  29. VER='1.9'
  30. # Device returning random bytes. With Solaris 9 /dev/random may block,
  31. # therefore we prefer the non-blocking /dev/urandom
  32. RandomDevice=/dev/urandom
  33. #MaxRand=4294967295   # 2^32 = 4 GB
  34. # Some shell commands (e.g. Linux "expr" ) have problems with integer values
  35. # greater than 2^31
  36. MaxRand=32767
  37. Usage () {
  38.     echo >&2 "$PN - return random number, $VER (stv '95)
  39. usage: $PN [maxvalue]
  40. Prints a random value (1 <= random <= maxvalue) to standard output.
  41. If no maximum value is specified, `echo \"$MaxRand + 1\" | bc` is the default"
  42.     exit 1
  43. }
  44. Msg () {
  45.     for i
  46.     do echo "$PN: $i" >&2
  47.     done
  48. }
  49. Fatal () { Msg "$@"; exit 1; }
  50. joinlines () {
  51.     # "bc" splits very long output lines using the following format:
  52.     # "a\
  53.     #   b"
  54.     tr -d '\134\012' # remove backslash and trailing line-feed character
  55.     echo  # terminate line using line-feed
  56. }
  57. while [ $# -gt 0 ]
  58. do
  59.     case "$1" in
  60. --) shift; break;;
  61. -h) Usage;;
  62. -*) Usage;;
  63. *) break;;   # First file name
  64.     esac
  65.     shift
  66. done
  67. if [ $# -gt 1 ]
  68. then Usage
  69. elif [ $# -eq 1 ]
  70. then
  71.     case "$1" in
  72.      *[!0-9]*)   Fatal "illegal number: $1";;
  73. *)     Max=$1;;
  74.     esac
  75. fi
  76. : ${Max:=$MaxRand}   # Use default value
  77. # Try different ways of getting a random number
  78. if [ -c $RandomDevice ]
  79. then
  80.     # Read 4 bytes from the random device (dd), and interpret them as a
  81.     # 32 bit long unsigned integer (od -t u4).
  82.     #n=`dd if=/dev/urandom bs=1 count=4 2>/dev/null |
  83.     #     od -t u4 | awk 'NR==1 {print $2}'`
  84.     # Uncomment the following to use 64 bit random numbers
  85.     #n=`dd if=/dev/urandom bs=1 count=8 2>/dev/null |
  86.     #     od -t u8 | awk 'NR==1 {print $2}'`
  87.     # Uncomment the lines below to get a random number with $ndigit
  88.     # digits.  Calculate the number of bytes needed as follows:
  89.     # bytes= ... # round log256(10^$ndigit)
  90.     #     -> log256(10^x) = x * log256(10) = x * ln(10)/ln(256)
  91.     #        = x * .41524101186092029348
  92.     # Example:
  93.     # How many bytes are needed to represent 10 decimal digits:
  94.     # 10 * .41524101186092029348 = 4.1524101186092029348
  95.     # -> 5 bytes needed to represent all 10 digit decimal values
  96.     #      from 0..9999999999
  97.     #ndigit=10 # 0..9999999999
  98.     #bytes=5
  99.     ndigit=`expr "$Max" : '.*'`  # string length
  100.     # The following calculation may return a result that is one to large
  101.     # because we do not attempt to properly round the value to the next
  102.     # largest integer value.
  103.     bytes=`echo "$ndigit * l(10)/l(256) + 1" | bc -l | cut -d. -f1`


    hexdigits=`echo "$bytes * 2" | bc`
    #echo >&2 "DEBUG: ndigit=<$ndigit> bytes=<$bytes> hexdigits=<$hexdigits>"
 
    n=`(echo ibase=16; dd if=/dev/urandom bs=1 count=$bytes 2>/dev/null |
         od -tx1 |   # write as hex byte stream
     sed -n '$q;p' |  # remove last line
     cut -d ' ' -f2- |  # remove offsets
     tr -d ' ' | joinlines |
     cut -c1-$hexdigit |
     tr '[a-f]' '[A-F]') | # "bc" needs upper case hex chars
     bc | joinlines`
 
elif [ -n "$RANDOM" ]
then
    # This shell has a built-in random function (ksh, bash, zsh), which
    # probably generates better distributed values than our "date"
    # approach.
    n=$RANDOM
else
    set -- `date '+%H %M %S'`
    [ $# -ne 3 ] && Fatal "could not invoke program date"
 
    n=`echo "$$ * $1 * $2 * $3 + $3" | bc`
fi
 
# Some "expr" commands have problems with large integer values
echo "$n % $Max + 1" | bc | joinlines

Reply

Marsh Posté le 17-07-2004 à 09:03:07   

Reply

Marsh Posté le 17-07-2004 à 09:03:32    

voila si ca peut aider

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed