原理

对数n取余,余应为0—(n-1)范围。

我们想要产生0-25范围内的数:

1
expr $RANDOM % 26

如果想得到1–68范围内的数,可以这样:

1
expr $RANDOM % 68 + 1
  • 前面可以得到最小为0,最大为67的随机数,再加上1,很自然的就可以得到最大为1,最小为68的数了。

如果想得到6–87范围内的数:

1
expr $RANDOM % 82 + 6
  • 前面可以得到最小为0,最大为81的随机数,再加上6,很自然的就可以得到最大为87,最小为6的数了

生成三位数

三位数,也就是100-999,从上面的知识,我们可以得出:

1
expr $RANDOM % 900 + 100

前面可以得到最小为0,最大为899的随机数,再加上100,很自然的就可以得到最大为999,最小为100的数了。

1
2
3
4
5
for i in {1..10000}
do
num=$[$RANDOM%900+100]
echo $num
done

image-20230103143646290

for循环

上面的语句可以执行。这种格式的for循环只能接受数字。

如果接受变量,则会无效。

1
2
3
4
for i in {$1..$2}
do
echo "$i"
done

为此,可以使用C语言格式的循环。

1
2
3
4
5
j=$1
for ((i=1; i<=j; i++))
do
echo "$i"
done

也就是

1
2
3
4
5
6
7
8
9
#!/bin/bash
read -p "生成多少个3位数呢?请输入:" count
echo $count
echo "结果:"
for((i=1;i<=count;i++))
do
num=$[$RANDOM%900+100]
echo $num
done

image-20230103145004617

结果存入文件

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
read -p "生成多少个3位数呢?请输入:" count
#echo $count
#touch num.txt
#txt=num.txt
for((i=1;i<=count;i++))
do
num=$[$RANDOM%900+100]
echo $num
echo -e "$num\t" >> txt
done

image-20230103145726505

image-20230103145629377