如果我运行<tr ng-repeat="x in names.retRows">
,则只返回./random.sh 10 45
和10
之间的随机数。
我可以使用
生成随机数45
但现在如何允许用户指定随机数的上限和下限?
答案 0 :(得分:3)
您可以使用shuf
#!/bin/bash
# $1: Lower limit
# $2: Upper limit
# Todo Check arguments
shuf -i $1-$2 -n 1
./random.sh 45 50
答案 1 :(得分:2)
尝试以下(纯BASH):
low=10
hgh=45
rand=$((low + RANDOM%(1+hgh-low)))
答案 2 :(得分:1)
我们的想法是将您的范围设置为默认下限,例如10
,并设置更高的边界,例如45
。所以你调整下限是这样的:$RANDOM % 45 + 10
,不是吗?
但是此解决方案存在问题,它假设您始终位于0 + 10
和45
之间,所以事实上它会一直有效,直到您达到35(35 + 10 = 45
你的更高的界限),超过35
将超出你的范围。
为了保持在范围内的解决方案是$RANDOM % (higher_b - lower_b)
,这将允许你保持在更高的界限,然后添加下限,这给你:
$RANDOM % (45 -10) + 10
示例错误输出:
for i in {0..10};do printf $[RANDOM % 45 + 10]" ";done
47 31 53 23 36 10 22 36 11 25 54
示例右输出:
for i in {0..10};do printf $[RANDOM % 35 +10]" ";done
39 44 14 12 38 31 25 13 42 33 16
如果您希望索引包含更高的界限,也可以写RANDOM % (higher - lower +1)
。
答案 3 :(得分:1)
模数的问题是$RANDOM % N
,除非N是2的幂,否则所有结果的概率分布都不相同:How to generate random number in Bash?。每man bash
,$RANDOM
产生0到32,767之间的数字(2 ** 15-1)。在某些情况下,这可能并不重要,但通过略微重写表达式,我们可以获得相同的分布。
for i in {0..10}; do echo -n "$((RANDOM*36/32768 + 10)) "; done; echo
具有用户可选范围的bash脚本:
#!/bin/bash
LOW=$1
HIGH=$2
echo $((RANDOM * ($HIGH-$LOW+1) / 32768 + LOW))
您还需要进行一些参数检查。