shell编程_while循环+随机数

while循环语句

特点:条件为真就进入循环,条件为假就退出循环

while 表达式  
do 
  command...
done
 

打印1到5

i=1;while [ $i -le 5 ];do echo $i;let i++;done 

while循环和for循环不同点在于,while需要在循环体内加入改变变量值的语句,使其跳出循环
用while需要注意死循环

随机数

系统变量:RANDOM,默认0~32767
前言:要想调用变量,不管你是什么变量都要给钱,而且是美元$

root@kali:/# echo $RANDOM
24199

产生0~1之间的随机数
root@kali:/# echo $[ $RANDOM%2 ]
0
root@kali:/# echo $[ R A N D O M 1 RANDOM%2 ] 1 这里第一个 是取值

root@kali:/# echo $[ $RANDOM%90+10 ]
73
随机产生10~99中的数字
先随机产生0~89,+10后取值

案例:随机产生139开头的电话号码
需求:产生1000个并写进文件中
思路:
1.产生1000个,需要循环1000次
2.139+8位,可以让每一位数字都随机产生 echo $ [$RANDOM10]
3.保存到变量,然后加入139保存到文件里

在这里插入图片描述案例:随机抽出5位幸运观众
需求:
1.在上面1000个手机号里随机抽出5位幸运观众
2.只显示头3个数和尾号的4个数,中间的都是用*代替

思路:
1.确定幸运观众所在的行 1-1000 (0-999 再+1) [ [ RANDOM%1000+1]
2.将电话号码提取出来 head -随机产生的行号 phone.txt |tail -l
3.显示前3个和后4个数到屏幕 echo 139****

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 ${luck_num:7:4}"
echo $luck_num >> luck.txt
#1是第0位,从第7位开始截取4个数字
sed -i "/$luck_num/d" $phone
#需要删除,不删除的话一个人有可能被抽选多次
done

需求:批量创建5个用户,每个用户的密码为一个随机数
思路:
1.循环创建5个用户
2.产生一个密码文件来保存用户的随机密码
3.从密码文件中取出随机密码赋值给用户

echo user0{1..5}:$[$RANDOM%9000+1000]|tr ' ' '\n'>>user_pass.file
#创建5个用户,分别给他们设定密码,并保存至文件中
#0-8999 再加上1000=1000~9999
# |tr ' ' '\n' 空格替换成换行符
for((i=1;i<=5;i++))
do
       user=`head -$i user_pass.file|tail -l|cut -d: -f1`
       pass=`head -$i user_pass.file|tail -l|cut -d: -f2`
       useradd $user
       echo $pass|passwd --stdin $user
done
发布了32 篇原创文章 · 获赞 7 · 访问量 2369

猜你喜欢

转载自blog.csdn.net/weixin_44901204/article/details/102752617