一文简述Shell中的random随机数

2024-08-20 00:00:02 浏览数 (1)

大家好呀!今天简单聊一聊Shell中的random随机数。随机数的生成及应用非常广泛常见,了解随机数的使用也是有必要的。

1、基本用法

bash默认有一个$RANDOM的变量,默认是0~32767。

set |grep RANDOM:查看上一次产生的随机数

代码语言:powershell复制
# 默认是0~32767
echo $RANDOM
# 查看上一次产生的随机数
set |grep RANDOM

# 产生0~1之间的随机数
echo $[$RANDOM%2]

# 产生0~2之间的随机数
echo $[$RANDOM%3]

# 产生0~100内的随机数
echo $[$RANDOM1]

依此类推,产生0~n之间的随机数:echo $[$RANDOM%(n 1)]

巧妙的利用加法:

代码语言:powershell复制
# 产生50-100之内的随机数
echo $[$RANDOMQ 50]

# 产生三位数的随机数
echo $[$RANDOM�0 100]

2、简单应用

编写一个脚本,产生一个phonenum.txt文件,随机产生以139开头的手机号1000个,每个一行。

1)创建一个random.sh脚本

代码语言:powershell复制
vim random.sh

2)根据要求编写脚本文件

法1:列表循环

代码语言:powershell复制
#!/bin/bash
# 循环1000次产生电话号码并保存到文件
for i in {1..1000}
do
	n1=$[RANDOM]
	n2=$[RANDOM]
	n3=$[RANDOM]
	n4=$[RANDOM]
	n5=$[RANDOM]
	n6=$[RANDOM]
	n7=$[RANDOM]
	n8=$[RANDOM]
	echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> phonenum.txt
done

法2:类c风格

代码语言:powershell复制
#!/bin/bash
# random phonenum
# 循环1000次产生电话号码
for ((i=1;i<=1000;i  ))
do
	n1=$[$RANDOM]
	n2=$[$RANDOM]
	n3=$[$RANDOM]
	n4=$[$RANDOM]
	n5=$[$RANDOM]
	n6=$[$RANDOM]
	n7=$[$RANDOM]
	n8=$[$RANDOM]
	echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> phonenum.txt
done

法3:while循环

代码语言:powershell复制
#!/bin/bash
i=1
while [ $i -le 1000 ]
do
	n1=$[$RANDOM]
	n2=$[$RANDOM]
	n3=$[$RANDOM]
	n4=$[$RANDOM]
	n5=$[$RANDOM]
	n6=$[$RANDOM]
	n7=$[$RANDOM]
	n8=$[$RANDOM]
	echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> phonenum.txt
	let i  
done

使用break

3、嵌套循环

所谓嵌套循环,即一个循环体内又包含另一个完整的循环。在外部循环的每次执行过程中都会触发内部循环,直至内部完成一次循环,才接着执行下一次的外部循环。

for、while和until循环可以相互嵌套

eg:以再经典不过的打印九九乘法表为例

法1:for循环

代码语言:powershell复制
#!/bin/bash
for ((y=1;y<=9;y  ))
do
	for ((x=1;x<=$y;x  ))
	do
		echo -ne "$x*$y=$[$x*$y]t"
	done
echo
echo
done

法2:while循环

代码语言:powershell复制
#!/bin/bash
y=1
while [ $y -le 9 ]
do
        x=1
        while [ $x -le $y ]
        do
                echo -ne "$x*$y=$[$x*$y]t"
                let x  
        done
echo
echo
let y  
done

法3:util循环

代码语言:powershell复制
#!/bin/bash
y=1
until [ $y -gt 9 ]
do
        x=1
        until [ $x -gt $y ]
        do
                echo -ne "$x*$y=$[ $x*$y ]t"
                let x  
        done
echo
echo
let y  
done

0 人点赞