云计算教程之Shell编程随机数

举报
tea_year 发表于 2024/08/27 10:54:57 2024/08/27
【摘要】 随机数⭐⭐⭐⭐⭐⭐各种语言,都有自己的函数,Shell.一般语言都是[0,1)随机小数bash默认有一个$RANDOM的变量 默认是0~32767。使用set |grep RANDOM 查看上一次产生的随机数echo $RANDOM​产生0~1之间的随机数echo $[$RANDOM%2]​产生0~2之间的随机数echo $[$RANDOM%3]​产生0~3之间的随机数echo ...

随机数⭐⭐⭐⭐⭐⭐

各种语言,都有自己的函数,Shell.一般语言都是[0,1)随机小数

bash默认有一个$RANDOM的变量     默认是0~32767。使用set |grep RANDOM   查看上一次产生的随机数
echo $RANDOM
​
产生0~1之间的随机数
echo $[$RANDOM%2]
​
产生0~2之间的随机数
echo $[$RANDOM%3]
​
产生0~3之间的随机数
echo $[$RANDOM%4]
。。。。
产生0~9内的随机数
echo $[$RANDOM%10]
​
产生0~100内的随机数
echo $[$RANDOM%101]
​
​
产生50-100之内的随机数
echo $[$RANDOM%51+50]
​
产生三位数的随机数
echo $[$RANDOM%900+100]

实战案例1

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

分析:
1. 产生1000个电话号码,脚本需要循环1000次
2. 139+8位,后8位随机产生,可以让每一位数字都随机产生,$[RANDOM%10] 0-9
3. 将随机产生的数字分别保存到变量里,然后加上139保存到文件里
​
#!/bin/bash
# random phonenum
# 循环1000次产生电话号码并保存到文件
for i in {1..1000}
do
    n1=$[RANDOM%10]
    n2=$[RANDOM%10]
    n3=$[RANDOM%10]
    n4=$[RANDOM%10]
    n5=$[RANDOM%10]
    n6=$[RANDOM%10]
    n7=$[RANDOM%10]
    n8=$[RANDOM%10]
    echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> phonenum.txt
done
​
#!/bin/bash
# random phonenum
# 循环1000次产生电话号码
for ((i=1;i<=1000;i++))
do
    n1=$[$RANDOM%10]
    n2=$[$RANDOM%10]
    n3=$[$RANDOM%10]
    n4=$[$RANDOM%10]
    n5=$[$RANDOM%10]
    n6=$[$RANDOM%10]
    n7=$[$RANDOM%10]
    n8=$[$RANDOM%10]
    echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> phonenum.txt
done
​
#!/bin/bash
i=1
while [ $i -le 1000 ]
do
    n1=$[$RANDOM%10]
    n2=$[$RANDOM%10]
    n3=$[$RANDOM%10]
    n4=$[$RANDOM%10]
    n5=$[$RANDOM%10]
    n6=$[$RANDOM%10]
    n7=$[$RANDOM%10]
    n8=$[$RANDOM%10]
    echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> phonenum.txt
    let i++
done
​
continue:继续,跳过本次循环,执行下一次循环
break:打断,执行循环体外的代码do..done外
exit:退出程序
​
​
#!/bin/bash
for i in {1..1000}
do
    n1=$[$RANDOM%10]
    n2=$[$RANDOM%10]
    n3=$[$RANDOM%10]
    n4=$[$RANDOM%10]
    n5=$[$RANDOM%10]
    n6=$[$RANDOM%10]
    n7=$[$RANDOM%10]
    n8=$[$RANDOM%10]
    echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> phonenum.txt
done
​
#!/bin/bash
#create phone num file
for ((i=1;i<=1000;i++))
do
    n1=$[$RANDOM%10]
    n2=$[$RANDOM%10]
    n3=$[$RANDOM%10]
    n4=$[$RANDOM%10]
    n5=$[$RANDOM%10]
    n6=$[$RANDOM%10]
    n7=$[$RANDOM%10]
    n8=$[$RANDOM%10]
    echo "139$n1$n2$n3$n4$n5$n6$n7$n8" |tee -a phonenum.txt
done
​
#!/bin/bash
count=0
while true
do
    n1=$[$RANDOM%10]
    n2=$[$RANDOM%10]
    n3=$[$RANDOM%10]
    n4=$[$RANDOM%10]
    n5=$[$RANDOM%10]
    n6=$[$RANDOM%10]
    n7=$[$RANDOM%10]
    n8=$[$RANDOM%10]
    echo "139$n1$n2$n3$n4$n5$n6$n7$n8" |tee -a phonenum.txt && let count++
    if [ $count -eq 1000 ];then
        break
    fi
done


  1. 在上面的1000个手机号里抽奖5个幸运观众,显示出这5个幸运观众。但只显示头3个数和尾号的4个数,中间的都用*代替

思路:

  • 确定幸运观众所在的行 随机生成 RANDOM $[RANDOM%1000+1]

  • 将电话号码提取出来 head 和 tail

  • 显示前3个和后4个数到屏幕 最后将电话号码输出到屏幕 echo ${电话号码部分}

#!/bin/bash
#定义变量
phone=/shell04/phonenum.txt
for ((i=1;i<=5;i++))
do
    #定位幸运观众所在行号
    line=`wc -l $phone |cut -d' ' -f1`
    luck_line=$[RANDOM%$line+1]
    #取出幸运观众所在行的电话号码
    luck_num=`head -$luck_line $phone|tail -1`
    #显示到屏幕
    echo "139****${luck_num:7:4}"
    echo $luck_num >> luck.txt
    #删除已经被抽取的幸运观众号码
    sed -i "/$luck_num/d" $phone
done
​
​
​
#!/bin/bash
file=/shell04/phonenum.txt
for i in {1..5}
do
    file_num=`wc -l $file |cut -d' ' -f1`
    line=`echo $[$RANDOM%$file_num+1]`
    luck=`head -n $line  $file|tail -1`
    echo "139****${luck:7:4}" && echo $luck >> /shell04/luck_num.txt
done
​
​
#!/bin/bash
for ((i=1;i<=5;i++))
do
file=phonenum.txt
line=`cat phonenum.txt |wc -l`  1000
luckline=$[$RANDOM%$line+1]
phone=`cat $file|head -$luckline|tail -1`
echo "幸运观众为:139****${phone:7:4}"
done
​
​
或者
#!/bin/bash
# choujiang
phone=phonenum.txt
for ((i=1;i<=5;i++))
do
    num=`wc -l phonenum.txt |cut -d' ' -f1`
    line=`echo $[$RANDOM%$num+1]`
    luck=`head -$line $phone |tail -1`
    sed -i "/$luck/d" $phone
    echo "幸运观众是:139****${luck:7:4}"
done
​
  1. 批量创建5个用户,每个用户的密码为一个随机数

思路:

  • 循环5次创建用户

  • 产生一个密码文件来保存用户的随机密码

  • 从密码文件中取出随机密码赋值给用户

#!/bin/bash
#crate user and set passwd
#产生一个保存用户名和密码的文件
#echo user0{1..3}:yunhe$[$RANDOM%9000+1000] #@~|tr ' ' '\n'>> user_pass.file
echo user0{1..3}:yunhe$[$RANDOM%9000+1000] |tr ' ' '\n'>> user_pass.file
#循环创建5个用户
for ((i=1;i<=5;i++))
do
    user=`head -$i user_pass.file|tail -1|cut -d: -f1`
    pass=`head -$i user_pass.file|tail -1|cut -d: -f2`
    useradd $user
    echo $pass|passwd --stdin $user
done
​
​
​
或者
for i in `cat user_pass.file`
do
    user=`echo $i|cut -d: -f1`
    pass=`echo $i|cut -d: -f2`
    useradd $user
    echo $pass|passwd --stdin $user
done
​
#!/bin/bash
#crate user and set passwd
#产生一个保存用户名和密码的文件
echo user0{1..3}:yunhe$[$RANDOM%9000+1000]#@~|tr ' ' '\n'|tr ':' ' ' >> user_pass.file
#循环创建5个用户
while read user pass
do
useradd $user
echo $pass|passwd --stdin $user
done < user_pass.file
​
​
pwgen工具产生随机密码:
[root@server shell04]# pwgen -cn1 12
Meep5ob1aesa
[root@server shell04]# echo user0{1..3}:$(pwgen -cn1 12)
user01:Bahqu9haipho user02:Feiphoh7moo4 user03:eilahj5eth2R
​
[root@server shell04]# echo user0{1..3}:$(pwgen -cn1 12)|tr ' ' '\n'
user01:eiwaShuZo5hi
user02:eiDeih7aim9k
user03:aeBahwien8co


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。