shell脚本大练习题

写一个创建用户的脚本,要求如下
1.执行时会询问,请输入要创建的用户名称(当用户超时8秒不输入,提示超时并退出),脚本会检测用户名是否已经存在,若已存在,则提示用户已存在,是否要为其设置密码,如否,则继续回到第1步,询问用户另一个用户名。如是,进入第3步。
2.如第1步完成,则会创建指定用户,然后脚本继续问用户是否为新用户设置密码,如否,则返回第1步继续创建其他用户,如是,则进入第3步
3.为用户设置密码,要求密码要验证2次,2次一致才可通过。同时密码要满足复杂性要求,要求如下:
    密码至少8个字符长度,密码必须包含 大写,小写字母,数字,和#@!,._  这之中的三种字符。 如不满足,则提示用户密码太短或太简单,返回第3步。
    且密码不能是 /usr/share/dict/words 已存在的字符,或是,则提示用户密码是个常见单词,然后返回第3步。
    用户只能尝试设置新密码3次,若超过3次仍然没有设置出满足要求的密码,则直接返回第1步。
4.在任何步骤,只要输入exit均可退出脚本。
#!/bin/bash
#判断输入是否超时
chaoshi(){
if read -t 8 -p "请输入用户名:" name
then
if [[ exit = $name ]];then
exit
else
yonghu
fi
else
echo
echo "输入超时!"
fi
}
out(){
let s++
if [ $s -eq 3 ];then
        chaoshi;
fi
}
#输入新密码
newpasswd(){
read -sp "Please input your password for ${name}: " Passwd1
#判断密码是否为exit
if [[ exit = $Passwd1 ]];then
echo
exit;
fi
echo
read -sp "Please input your password for ${name}: " Passwd2
#判断密码是否为exit
if [[ exit = $Passwd2 ]];then
echo
exit;
fi
if [ $Passwd1 = $Passwd2 ];then
if [ ${#Passwd1} \> 8 ];then
#"Passwd1_@#\!"|grep -o '[_!@#]'
        if ( `echo $Passwd1|grep "[_#@!]"` &> /dev/null );then
        let a++
        echo $a 
        fi
        if (echo $Passwd1|grep "[[:lower:]]" &> /dev/null );then
        let a++
        fi
        if (echo $Passwd1|grep "[[:upper:]]" &> /dev/null );then
         let a++
        fi
        if (echo $Passwd1|grep "[0-9]" &> /dev/null );then
         let a++
        fi
        if [ $a -ge 3 ];then
        echo
        echo $Passwd1|passwd --stdin $name &> /dev/null && echo "Password for $name update!"
        else
        echo "密码太简单了!"
        out
        newpasswd
        fi
else
echo
        echo "密码太短了";
        out
        newpasswd;
fi
else
echo
echo "两次输入密码不一致,请重新输入"
out
newpasswd
fi
}
#创建新用户
newuser(){
useradd $name && echo "$name created"
newpasswd
}
#用户登录时调用
yonghu(){
        if ( id $name &> /dev/null );then
        echo "用户已存在!"
        read -p "是否为期设置密码?(y/n)" yesorno
        case $yesorno in
        y)newpasswd;;
        n)chaoshi;;
        exit)exit;;
        *)echo "输入错误!";;
        esac
        else
        echo "用户不存在"
        newuser
        fi
}
chaoshi

猜你喜欢

转载自blog.csdn.net/qq_34208467/article/details/81812205