相关疑难解决方法(0)

如何在 bash 中有效地生成大的、均匀分布的随机整数?

我一直在想这将是获得最佳的方式很好在bash,即随机性,这将是一个过程,以获得之间的随机正整数MIN,并MAX使得

  1. 范围可以是任意大的(或者至少可以达到 2 32 -1);
  2. 值均匀分布(即没有偏差);
  3. 它是有效的。

在 bash 中获得随机性的一种有效方法是使用$RANDOM变量。但是,这仅对 0 到 2 15 -1之间的值进行采样,这对于所有用途来说可能不够大。人们通常使用模数将其置于他们想要的范围内,例如,

MIN=0
MAX=12345
rnd=$(( $RANDOM % ($MAX + 1 - $MIN) + $MIN ))
Run Code Online (Sandbox Code Playgroud)

此外,这会产生偏差,除非$MAX碰巧除以 2 15 -1=32767。例如,如果$MIN是 0 并且$MAX是 9,那么值 0 到 7 的可能性比值 8 和 9 稍大,$RANDOM永远不会是 32768 或 32769。随着范围的增加,这种偏差会变得更糟,例如,如果$MIN是 0 并且$MAX是9999,那么数字 0 到 2767 的概率为4 / 32767,而数字 2768 到 9999 的概率仅为 …

command-line bash shell-script

35
推荐指数
5
解决办法
2万
查看次数

$(echo $RANDOM | cut -b 1-2) 在 shell 脚本中返回空行

我有这个脚本,

#!/bin/sh
guess=$(echo $RANDOM | cut -b 1-2)

read -p "Im thinking of a number, can you guess what it is? " number

case "$number" in
    "$guess") echo "\nCongratulation number guessed corectly!"
        exit 0
        ;;
    *) echo "\nIncorrect number guessed, try again? [yes or no]"
        read yesorno
        case "$yesorno" in
            "yes") sh guess.sh
                ;;
            "no") echo "\nHave a nice day!"
                exit 0
                ;;
            *) echo "Invalid input"
                exit 1
                ;;
        esac
        ;;
esac
Run Code Online (Sandbox Code Playgroud)

变量 $guess 应该返回一个 2 位数字,但返回 null。运行游戏sh …

shell-script

-1
推荐指数
1
解决办法
164
查看次数

标签 统计

shell-script ×2

bash ×1

command-line ×1