当前位置: 首页 > news >正文

SHELL编程练习-批量创建删除用户和组

1.需求

reed是系统管理员,需要为一个教室中的服务器添加一个老师和若干学生用户,手动添加太麻烦了,请你为他编写一个bash脚本 userctr.sh 实现批量添加和删除用户。老师用户名,学生用户名和学生数量使用参数进行控制。

userctr.sh 脚本执行时候包括四个参数:

bash userctr.sh 操作(add或者del)教师名 学生名前缀 学生数量

脚本成功执行后将创建1个教师用户和若干个学生用户,满足下列条件:

1)学生数量参数,参数范围为1~10,若超过10或不为正整数,则报错打印 parameter error
2)学生名前缀为字符串,只允许包含小写字母,否则报错打印 parameter error,前缀后面跟数字序列
3)每个用户设置一个随机6位数密码,在添加命令执行后并将用户名和对应的密码输出
4)如果某个用户名已经存在,则默认不需要创建该用户

执行脚本的范例:

#添加一位叫reeeed教师,3位叫deeeer的学生
[root@reedoracle ~]# ./userctr.sh add reeeed deeeer 3
User [reeeed] create successfully.
reeeed:2bf168
User [deeeer1] create successfully.
deeeer1:39adcd
User [deeeer2] create successfully.
deeeer2:a12201
User [deeeer3] create successfully.
deeeer3:4088d2
#参数不正确时提示
[root@reedoracle ~]# ./userctr.sh add 123 321 11
Parameter error!
#输入不规范时的提示
[root@reedoracle ~]# ./userctr.sh add 123 321 
--Usage:
        ./userctr.sh [add/del] [Teacher'sName] [Student'sName] [The number of Students]
        ex.
        ./userctr.sh add teacher stu 3
--
        add:useradd username
        del:userdel username
        [Teacher'sName]:teacher's name
        [Student'sName]:student's name,just only the beginning of a lowercase letter 
        [The number of Students],only [1-10]

2.难点和知识点
难点:

1.需要判断输入的参数是否正确和规范
2.嵌套多个条件判断语句
3.随机生成密码

知识点:

1.SHELL中的if/for语法
2.SHELL参数使用
3.用户创建

具体实现:

[root@reedoracle ~]# cat userctr.sh 
#!/bin/bash

#func:add or del user
#author:reed

. /etc/profile

UserCtr=$1
TeacherName=$2
StudentName=$3
StudentNumber=$4

Usage(){
cat<<EOF
--Usage:
        $0 [add/del] [Teacher'sName] [Student'sName] [The number of Students]
        ex.
        $0 add teacher stu 3
--
        add:useradd username
        del:userdel username
        [Teacher'sName]:teacher's name
        [Student'sName]:student's name,just only the beginning of a lowercase letter 
        [The number of Students],only [1-10]
EOF
}

if [ $# -eq 4 ];then
        if [ $1 == "add" ];then
                #echo "add"
                if [[ "$2" =~ ^[a-z]+$  &&  "$3" =~ ^[a-z]+$  && "$4" -ge 1 && "$4" -le 10 ]];then
                        #create user $2
                        id $2 >>/dev/null 2>&1
                        if [ $? -ne 0 ];then
                                useradd $2
                                TeacherPasswd=$(date|md5sum|cut -c 1-6)
                                echo $TeacherPasswd|passwd --stdin $2 >>/dev/null 2>&1
                                echo "User [$2] create successfully."
                                echo "$2:$TeacherPasswd"
                        else
                                echo "The user [$2] is exist."
                        fi
                        for ((num=1;num<=$4;num++));do
                                id ${3}${num} >>/dev/null 2>&1
                                if [ $? -ne 0 ];then
                                        useradd ${3}${num}
                                        StudentPasswd=$(echo $RANDOM|md5sum|cut -c 1-6)
                                        echo $StudentPasswd|passwd --stdin ${3}${num} >>/dev/null 2>&1
                                        echo "User [${3}${num}] create successfully."
                                        echo "${3}${num}:$StudentPasswd"
                                else
                                        echo "The user [${3}${num}] is exist."
                                fi
                        done
                else
                        echo "Parameter error!"
                        exit 10000
                fi
        elif [ $1 == "del" ];then
                echo "Please delete user manually."
        else
                echo "Parameter error!Please input [add] or [del]."
                exit 10086
        fi
else
        Usage
fi

注:“del”用户删除的原理与创建用户一样,懒的写了。

转载于:https://blog.51cto.com/luweikai/2071509

相关文章:

  • angular学习第一篇-----环境搭建
  • 回溯算法入门及经典案例剖析(初学者必备宝典)
  • Linux系统的LOG日志文件及入侵后日志的清除
  • C# int? 关键字
  • 4-机器学习启蒙- 聚类和相似度模型
  • 1.2—Spring项目快速搭建—2.基于Spring Tool Suite搭建
  • “box-shadow”属性(转)
  • SQL Server 使用 Pivot 和 UnPivot 实现行列转换
  • 博通孔海泉:一个完全无线连接的市场要解决4个问题
  • CCF NOI1048 检测矩阵
  • IndexedDB
  • pl/sql 笔记之存储过程、函数、包、触发器(下)
  • mysql的库和表相关操作
  • Exchange 2010升级sp2报错
  • 【Cocosd2d-x CCMenu菜单之二】
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • AHK 中 = 和 == 等比较运算符的用法
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Fastjson的基本使用方法大全
  • Java深入 - 深入理解Java集合
  • php ci框架整合银盛支付
  • Promise面试题,控制异步流程
  • Python利用正则抓取网页内容保存到本地
  • Spring Cloud中负载均衡器概览
  • vue脚手架vue-cli
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 对象引论
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 记录:CentOS7.2配置LNMP环境记录
  • 十年未变!安全,谁之责?(下)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 微信小程序开发问题汇总
  •  一套莫尔斯电报听写、翻译系统
  • 正则与JS中的正则
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ###C语言程序设计-----C语言学习(6)#
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (007)XHTML文档之标题——h1~h6
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (十八)三元表达式和列表解析
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • .php文件都打不开,打不开php文件怎么办
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d