这个问题与bash、像Ubuntu一样的Linux、/dev/随机和/dev/urandom有关。
如何在bash上通过/dev/urandom在一个范围内生成一个可以是正数或负数的随机数?
已知如下:
下面是一个未搜索的解决方案的示例,它可以在bash上的一个范围内完成,通过没有搜索的函数“随机”,并且只在一个正的范围内。
min=1
max=1000
rnd_count=$(( RANDOM % ( max - min + 1 ) + min ))
echo $rnd_count
一个部分的解决办法是通过在正的范围上随机产生一个随机数或在正的范围上产生一个随机数,如何在正和负的范围上产生随机数,这是我所不知道的。也不是纯粹的巴什。一个纯粹的bash解决方案是需要的。
echo "$(od -An -N4 -tu4 /dev/urandom) % 15 + 1" | bc
发布于 2021-02-23 09:19:13
我能想到的最简单、最干净的方法就是你的问题中已经有了什么:
min=-100; max=1; rnd_count=$(( RANDOM % ( $max - $min + 1 ) + $min )); echo $rnd_count
您可以轻松地将其转换为一个函数:
getRand(){
min="${1:-1}" ## min is the first parameter, or 1 if no parameter is given
max="${2:-100}" ## max is the second parameter, or 100 if no parameter is given
rnd_count=$((RANDOM % ( $max - $min + 1 ) + $min )); ## get a random value using /dev/urandom
echo "$rnd_count"
}
如果您将这些行粘贴到您的终端中,或者将它们添加到您的~/.bashrc
文件中并打开一个新的终端,那么现在可以这样做:
$ getRand -5 5
-3
这给出了-5
和5
之间的随机数。
发布于 2021-06-28 15:08:31
你可以按以下方式做:
#!/bin/bash
get_rnd_num_eq_dis(){ # max Zahlenbereich 0 - 32767
min="${1:-1}" ## min is the first parameter, or 1 if no parameter is given
max="${2:-100}" ## max is the second parameter, or 100 if no parameter is given
srnd="$((0x$(dd if=/dev/urandom of=/dev/stdout bs=4 count=1 status=none | xxd -p)))" # SRANDOM Nachbau
rnd_count=$(( srnd % ( max - min + 1 ) + min ));
echo "$rnd_count"
}
ug=-1000 # untere Grenze
og=1000 # obere Grenze
var="$(get_rnd_num_eq_dis $ug $og)" # Call the function
echo "$var" # output
sleep 2
https://askubuntu.com/questions/1318689
复制