我想在shell中生成随机a和b两个变量?

时间:2017-08-01 09:30:39

标签: bash shell

我想在Ubuntu中使用shell脚本生成两个随机变量ab。变量a是0到10之间的随机整数,而变量b是0到2之间的双/浮点数,但变量b应该是两位数,如0.1,0.2 ... 0.5 1.0,2.0你能帮我写一下吗?这是我目前的代码:

min=0; 
max=10; 
ran=$RANDOM; 
for iter in {1..1..1}
    do
    a=($ran%$max+$min)
    b=
    echo $a, $b
done

4 个答案:

答案 0 :(得分:3)

只有Bash

Interview

我根据$ for i in $(seq 15); do > a=$(($RANDOM%21)) > if [ $a -le 10 ]; then a='0.'${a}; else a=${a:0:1}.${a:1}; fi > echo $a > done 2.0 1.4 0.9 0.3 0.0 1.6 1.7 1.9 1.6 1.8 0.9 0.3 1.2 1.1 0.6 $ 计算随机数$RANDOM的模块 - 结果是210之间的整数,包括在内,并存储结果为20

如果a小于a,我会先加零和点,否则我取10的第一个字符,插入一个点并最终追加{{1}的最后一个字符1}}。

a手册页中解释了两个字符a的操作:

a

答案 1 :(得分:2)

您可以根据

的值计算b的值
b=`echo "scale=1; $a/5" |bc| awk '{printf "%.1f", $0}'`

我希望这会有所帮助。

答案 2 :(得分:1)

您可以使用awk生成这两个数字:

awk -v seed=$RANDOM 'BEGIN{srand(seed); printf "%d : %.2f\n", int(rand()*10), rand()*2}'

将两个数字分配给shell变量:

read a b < <(awk -v seed=$RANDOM 'BEGIN{srand(seed); printf "%d %.2f\n", int(rand()*10), rand()*2}')
echo "$a : $b"

5 : 1.51

<强>测试

for i in {1..20}; do
   awk -v seed=$RANDOM 'BEGIN{srand(seed); printf "%d : %.2f\n", int(rand()*10), rand()*2}'
done

3 : 0.63
4 : 0.73
9 : 1.31
8 : 0.32
2 : 1.35
4 : 0.72
7 : 0.71
7 : 1.91
3 : 1.90
0 : 1.39
5 : 1.95
2 : 1.38
7 : 0.71
5 : 0.38
1 : 0.47
3 : 1.96
2 : 0.80
9 : 0.51
6 : 0.73
0 : 1.58

答案 3 :(得分:1)

仅限Bash(以及需要时的一些@Entity @Table public class Student implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; )。最高1.9(从0.0):

expr

最多2.0要求使用(例如)$ echo $(($RANDOM%2)).$(($RANDOM%10))

expr

说明:

$ r=3.0; while [ $(expr $r \<= 2.0) -eq 0 ] ; do r=$(($RANDOM%3)).$(($RANDOM%10)) ; done ; echo $r
1.4