LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: KornLee

考考你:如何用shell产生随机数组

[复制链接]
发表于 2003-12-27 18:57:38 | 显示全部楼层
sorry,没仔细看题目,以为大家在讨论shell下产生随机数,
发表于 2003-12-27 19:14:10 | 显示全部楼层
head -c10 /dev/urandom | od -t u1 -A d -w1|sort -k2|tail -n10|cut -f1 -d' '
就算基本上可以达到要求吧
 楼主| 发表于 2003-12-28 01:34:40 | 显示全部楼层
最初由 bouzouki 发表
head -c10 /dev/urandom | od -t u1 -A d -w1|sort -k2|tail -n10|cut -f1 -d' '
就算基本上可以达到要求吧

当然~~,可是我认为最牛的还是r2007兄的脚本

最初由 r2007 发表

另外一个思路
r2007@www r2007 $ n=26
r2007@www r2007 $ a=($(for ((i=1;i<=$n;i++));do echo "$i $RANDOM";done|sort -k2n|cut -d" " -f1))
r2007@www r2007 $ echo ${a
  • }
    17 4 26 19 2 5 16 21 22 20 11 6 23 8 25 24 12 7 13 14 1 3 18 15 10 9
    r2007@www r2007 $

  • 我好歹也交卷吧~~,虽然脚本烂了些~~
    1. [/home/javalee/myshell]cat newrand
    2. #!/bin/ksh
    3. #创建随机数组
    4. #要导出的环境,用dot命令
    5. #脚本开始
    6. #初始化空数组array.
    7. set -A array
    8. #初始化数组下标.
    9. i=0
    10. #开始主循环.
    11. while true;do
    12. #产生随机数.
    13.         rand=$(perl -e "print int rand($(($1+1)))")
    14.         [[ $rand -eq 0 ]] && continue
    15. #向数组array中添加不重复的元素.
    16.         if ! echo ${array[*]}|tr ' ' '\n'|grep -q "\<$rand\>";then
    17.                 array[$i]=$rand
    18.                 ((i+=1))
    19.         else
    20.                 continue
    21.         fi
    22. #当数组array元素个数满足条件,跳出循环.
    23.         ((${#array[*]}==$1)) && break
    24. done
    25. #导出数组.
    26. export var=${array[*]}
    27. set -A array $(echo $var);echo ${array[*]}
    28. #脚本结束,取消脚本中无用变量
    29. unset i rand var
    复制代码
    测试:
    [/home/javalee/myshell]typeset|grep array
    [/home/javalee/myshell]. newrand 50
    33 37 19 2 14 12 25 21 43 34 47 13 30 40 26 50 32 15 23 41 18 28 49 44 27 38 45 48 8 5 24 4 11 46 16 1 17 42 29 6 10 39 3 22 9 20 31 35 7 36
    [/home/javalee/myshell]typeset|grep array
    typeset array
    [/home/javalee/myshell]echo ${array
  • }
    33 37 19 2 14 12 25 21 43 34 47 13 30 40 26 50 32 15 23 41 18 28 49 44 27 38 45 48 8 5 24 4 11 46 16 1
  •  楼主| 发表于 2003-12-28 02:06:53 | 显示全部楼层
    最初由 bouzouki 发表
    head -c10 /dev/urandom | od -t u1 -A d -w1|sort -k2|tail -n10|cut -f1 -d' '
    就算基本上可以达到要求吧

    给你完善完善:
    1. [/home/javalee]bash
    2. [/home/javalee]n=26
    3. [/home/javalee]array=$(head -c$n /dev/urandom|od -t u1 -A d -w1|sort -k2|\
    4. sed 's/0.*0\([1-9]\)/\1/g;/0.* /d;s/ [0-9].*//g'|tr '\n' ' ')
    复制代码
    [/home/javalee/myshell]echo ${array
  • }
    26 6 7 21 15 12 5 18 4 25 3 3 22 17 2 9 1 19 23 14 11 8 24 16
  • 发表于 2003-12-28 14:26:06 | 显示全部楼层
    嘿嘿,原来$RANDOM也可以产生随机数,又学一招
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表