我想在Ubuntu中使用shell脚本生成两个随机变量a
和b
。变量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
答案 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
的模块 - 结果是21
和0
之间的整数,包括在内,并存储结果为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