Shell阶段06 while循环, 示例, 随机密码mkpasswd

1.while循环基本概述

只要条件成立,就会反复执行循环语句,直到条件不成立时,才会退出。

语法

#第一种
while 条件测试
do
    循环体
done

#第二种
while true    #这里不一定写true,写:也可以,写true比较规范
do
    循环体
done

#第三种
while read line    #从文件中读取行
do
    循环体
done < path.txt

#语法示例脚本
#将一个数字1-9升序打印出来
[root@shell01 scripts]# vim while-1.sh
#!/bin/bash
Num=1
while [ $Num -lt 10 ]
do
    echo $Num
    let Num++
done

2.while循环场景示例

1.创建10个不同日期的文件
[root@shell01 scripts]# vim while-2.sh
#!/bin/bash
a=20
while [ $a -lt 30 ]
do
    date -s "2020/02/$a" &>/dev/null && touch $(date +%F).txt
    if [ $? -eq 0 ];then
        echo "$(date +%F).txt 创建成功! "
    else
        echo "$(date +%F).txt 创建失败! "
    fi
    let a++
done

ntpdate ntp.aliyun.com &>/dev/null    #时间和阿里保持同步

2.while循环读入文件的方式,进行创建用户
[root@shell01 scripts]# vim user.txt
acc
abb
add

[root@shell01 scripts]# vim while-5.sh
#!/bin/bash
while read line
do
    id $line &>/dev/null
    if [ $? -eq 0 ];then
        echo "用户${line}已经存在!无需再次进行创建!"
    else
        useradd $line &>/dev/null
        if [ $? -eq 0 ];then
            echo "用户${line}创建成功!"
        else
            echo "用户${line}创建失败!"
        fi
    fi
done < user.txt


#生成24位随机密码,要求由数字,大小写字母,特殊符号组成 (mkpasswd)
[root@shell01 scripts]# yum install -y expect
#-l长度 -d数字 -c小写字母 -C大写字母 -s特殊符号
[root@shell01 scripts]# mkpasswd -l 24 -d 6 -c 6 -C 6 -s 6


3.随机猜数字游戏
    1.随机一个1-100之间的数字
    2.执行脚本时,提示用户输入一个数字
    3.判断用户输入的数字是大还是小
    4.猜错了,继续猜,猜对了退出
    5.统计出总共失败多少次和总共猜了多少次
    
[root@shell01 scripts]# vim while-8.sh
#!/bin/bash
#1.产生一个属技术
Random=$(( RANDOM % 100 + 1 ))
a=0
echo "数字游戏"
while true
do
    #2.提示用户输入一个1-100之间的数字
    read -p "请输入一个[1-100]之间的数字:" Num
    #3.判断数字是否是整数
    if [[ ! $Num =~ ^[0-9]+$ ]];then
        echo "你猜的数字不是一个整数!"
        continue    #跳出本次循环下面的命令,继续执行下次循环
    fi
    if [ ! $Num -gt 0 -o ! $Num -le 100 ];then
        echo "你猜的数字不在1-100之间的范围!"
        continue
    fi
    if [ $Num -gt $Random ];then
        echo "猜大了"
    elif [ $Num -lt $Random ];then
        echo "猜小了"
    else
        echo "猜对了"
        break
    fi
    let a++
done
echo "总共猜了$(( $a + 1 ))次!失败了${a}次!"

 

posted @ 2024-05-31 00:30  战斗小人  阅读(12)  评论(0编辑  收藏  举报