小楼是一个系统管理员,需要为一个教室中的服务器添加一个老师和若干学生用户,手动添加太麻烦了,请你为他编写一个bash脚本 userctr.sh 实现批量添加和删除用户。老师用户名,学生用户名和学生数量使用参数进行控制。
userctr.sh 脚本执行时候包括四个参数:
bash userctr.sh 操作(add或者del)教师名 学生名前缀 学生数量
脚本成功执行后将创建1个教师用户和若干个学生用户,满足下列条件:
1、学生数量参数,参数范围为1~10,若超过10或不为正整数,则报错打印 parameter error
2、学生名前缀为字符串,只允许包含小写字母,否则报错打印 parameter error,前缀后面跟数字序列
3、每个用户默认使用 zsh,教师用户默认具备 sudo 权限
4、每个用户设置一个随机6位数字密码,在添加命令执行后并将用户名和对应的密码输出
5、如果某个用户名已经存在,则默认不需要创建该用户,输出时密码显示为6个星号
执行脚本的范例:
# 添加一个 teacher 用户和 stu1 到 stu6 6个学生用户
$ bash userctr.sh add teacher stu 6
teacher:901231
stu1:271828
stu2:928172
stu3:******
stu4:384712
stu5:098273
stu6:921098
# 删除一个 teacher 用户和 stu1 到 stu6 6个学生用户
$ bash test.sh del teacher stu 6
其中 stu3 六个星号代表这个用户先前已经被创建了,所以该命令执行的时候并不清楚该用户的密码。删除命令执行时如果某个用户不存在也不需要报错,直接执行删除其他用户。
目标
脚本存放的路径必须在 home/shiyanlou/userctr.sh
脚本执行需要满足上述需求
参数不符合要求需要直接在屏幕打印 parameter error
提示语
usermod
chpasswd
md5sum
代码如下:
#!/bin/bash
if [ $# -ne 4 ];then #判断参数个数是否为4
echo "parameter error"
exit 0
fi
expr $4 + 0 &>/dev/null #判断第四个参数是否为整数
if [ $? -ne 0 ] || [ $4 -gt 10 ] || [ $4 -lt 1 ];then
echo "parameter error"
exit 0
fi
if [[ ! $3 =~ ^[a-z]+$ ]];then #第三个参数是否全为小写字母组成
echo "parameter error"
exit 0
fi
function add_user(){
if `id $1 &>/dev/null`;then
echo "$1:******"
else
useradd -s /usr/bin/zsh $1 &> /dev/null
#随机数的获取
password=`head /dev/urandom |tr -dc '0-9' | cut 1-6`
#密码不必手动输入
echo $password | passwd $1 --stdin
echo "$1:$password"
fi
}
function del_user(){
if `id $1 &> /dev/null`;then
userdel $1
fi
}
if [ $1 == 'add' ];then
add_user $2
for i in `seq $4`;do
add_user ${3}${i}
done
elif [ $1 == 'del' ];then
del_user $2
for i in `seq $4`;do
del_user ${3}${i}
done
fi