【问题标题】:Shell script random number generatingShell脚本随机数生成
【发布时间】:2023-03-13 12:16:01
【问题描述】:

var=$RANDOM 创建随机数,但我如何指定一个范围,例如 0 到 12 之间?

【问题讨论】:

    标签: bash shell variables random random-sample


    【解决方案1】:

    如果你已经有了你的随机数,你可以说

    var=$RANDOM
    var=$[ $var % 13 ]
    

    0..12获取号码。

    编辑: 如果你想产生从$x$y 的数字,你可以很容易地修改这个:

    var=$[ $x + $var % ($y + 1 - $x) ]
    

    【讨论】:

      【解决方案2】:

      0 到 12 之间(包括):

      echo $((RANDOM % 13))
      

      编辑:请注意,此方法并不完全正确。因为 32768 不是 13 的倍数,所以生成 0 到 8 的几率(0.04%)略高于其余数字(9 到 12)。

      这是应该提供平衡输出的shell函数:

      randomNumber()
      {
        top=32768-$((32768%($1+1)))
        while true; do
          r=$RANDOM
          [ r -lt $top ] && break
        done
        echo $((r%$1))
      }
      

      当然,如果范围的较高值超过 32767,则应该设计更好的东西。

      【讨论】:

        【解决方案3】:

        在 linux 上使用 shuf 的替代方法(或者确切地说是 coreutils):

        var=$(shuf -i0-12 -n1)
        

        【讨论】:

        • 嗯。那么你的脚本是不可移植的。
        【解决方案4】:

        给你

        echo $(( $RANDOM % 12 ))
        

        我希望这会有所帮助。

        【讨论】:

        • 更正:$(( $RANDOM % 13 ))
        • 是的,同意,谢谢。我很高兴能先回答一个简单的问题,但我测试得不够仔细!感谢您的 2 票赞成(无论您是谁);-)
        • 请注意,内部 $ 是可选的,因为发现非数字字符串只能是变量名。
        【解决方案5】:

        本文档包含一些使用此功能的示例,例如 RANGE 和 FLOOR,可能会有所帮助:http://tldp.org/LDP/abs/html/randomvar.html

        【讨论】:

          【解决方案6】:

          在 FreeBSD 和您可以使用的其他 BSD 上:

          jot -r 3 0 12
          

          这将创建从 0 到 12 的 3 随机数。

          另一种选择,如果每个脚本只需要一个随机数,你可以这样做:

          var=$(( $$ % 13 ))
          

          这将使用脚本的 PID 作为种子,这应该是随机的。范围还是从 0 到 12。

          【讨论】:

          • Mac OS X 也有 jot。但不是 Linux,所以这不是可移植的。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-17
          • 2011-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多