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 这里第一个
RANDOM1这里第一个是取值
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