用户和组的批量创建与删除

LinuxBeginner
立即练习

介绍

在此次挑战中,你将创建一个名为 userctr.sh 的 bash 脚本,用于自动化服务器上用户的批量添加和删除。你将编写一个脚本,该脚本接受命令行参数来指定操作(adddel)、教师的用户名、学生用户名的前缀以及要管理的学生的数量。此任务将提升你在 shell 脚本编写、用户管理和自动化方面的技能,这些技能对于系统管理至关重要。

这是一个挑战(Challenge),与实验(Lab)不同,你需要独立完成挑战任务,而不是按照实验的步骤学习。挑战通常有一点难度。如果你觉得困难,可以与 Labby 讨论或查看解决方案。根据历史数据,这是一个 中级 级别的挑战,通过率为 67%。获得了学习者 93% 的好评率。

用户和组的批量创建与删除

系统管理员需要一种方法来高效地为课堂服务器添加教师和多个学生用户。手动创建每个账户既繁琐又容易出错。你的任务是创建一个 bash 脚本 userctr.sh 来自动化此过程。该脚本将以参数形式接收操作类型、教师姓名、学生姓名前缀以及学生数量。

任务

  • /home/labex/project 目录下创建一个名为 userctr.sh 的 Bash 脚本。
  • 该脚本必须实现两个主要操作:adddel,由第一个命令行参数决定。
  • 对于 add 操作,创建一个教师用户和指定数量的学生用户。
  • 对于 del 操作,删除指定的教师和学生用户。
  • 该脚本必须根据以下要求验证所有输入参数。

要求

  • 执行格式: 脚本必须接受四个参数来执行:

    sh userctr.sh <operation> <teacher_name> <student_prefix> <student_count>
  • 参数验证:

    • 脚本必须接收正好四个参数。否则,应打印 parameter error 并退出。
    • student_count(第四个参数)必须是介于 1 和 10(含)之间的整数。否则,打印 parameter error 并退出。
    • student_prefix(第三个参数)必须只包含小写字母。否则,打印 parameter error 并退出。
  • add 操作详情:

    • 如果要添加的用户已存在,请勿尝试创建。而是打印其用户名后跟 ******(例如,stu3:******)。
    • 对于新用户,生成一个随机的 6 位数字密码。
    • 为每个新创建的用户打印用户名及其密码,用冒号分隔(例如,teacher:901231)。
    • 所有创建的用户必须使用 /bin/zsh 作为其默认 shell。
    • 教师用户必须添加到 sudo 组以授予管理权限。
  • del 操作详情:

    • 脚本应删除指定的教师和学生用户,包括他们的主目录。
    • del 操作不应产生任何输出。
    • 如果要删除的用户不存在,脚本不应报告错误,并应继续删除其他存在的用户。

示例

以下示例演示了你的脚本的预期行为。

  • 添加用户: 此命令添加一名教师(teacher)和六名学生(stu1stu6)。

    sh userctr.sh add teacher stu 6
  • 示例输出:

    teacher:901231
    stu1:271828
    stu2:928172
    stu3:******
    stu4:384712
    stu5:098273
    stu6:921098

    在此输出中,stu3 的星号表示该用户已存在,因此未生成新密码。

  • 删除用户: 此命令删除同一组用户。成功完成后不应产生任何输出。

    sh userctr.sh del teacher stu 6

提示

  • 在需要 root 权限的命令(如 useradduserdel)前使用 sudo
  • 使用 $# 检查参数数量。
  • 使用 $1$2 等访问参数。
  • 要检查用户是否存在,你可以使用 id -u <username>。如果用户不存在,该命令将返回非零退出码。
  • 使用 useradd -m -s /bin/zsh <username> 创建一个带有主目录并设置 Zsh shell 的用户。
  • 使用 usermod -aG sudo <username> 将用户添加到 sudo 组。
  • 使用 userdel -r <username> 删除用户及其主目录。
  • 要生成一个随机的 6 位数字,你可以使用 shuf -i 100000-999999 -n 1
  • for 循环对于迭代学生数量很有用:for ((i=1; i<=$student_count; i++))
  • 使用 if [[ "$string" =~ "regex" ]] 进行模式匹配以验证参数。
✨ 查看解决方案并练习

总结

恭喜你!你已成功创建了一个用于自动化用户管理的 bash 脚本。此脚本可以批量添加和删除用户、验证输入参数以及处理现有用户,这些都是任何系统管理员必备的技能。你已在脚本中练习了条件语句、循环、命令行参数以及 useradduserdel 等外部命令的使用。