介绍
在此次挑战中,你将创建一个名为 userctr.sh 的 bash 脚本,用于自动化服务器上用户的批量添加和删除。你将编写一个脚本,该脚本接受命令行参数来指定操作(add 或 del)、教师的用户名、学生用户名的前缀以及要管理的学生的数量。此任务将提升你在 shell 脚本编写、用户管理和自动化方面的技能,这些技能对于系统管理至关重要。
用户和组的批量创建与删除
系统管理员需要一种方法来高效地为课堂服务器添加教师和多个学生用户。手动创建每个账户既繁琐又容易出错。你的任务是创建一个 bash 脚本 userctr.sh 来自动化此过程。该脚本将以参数形式接收操作类型、教师姓名、学生姓名前缀以及学生数量。
任务
- 在
/home/labex/project目录下创建一个名为userctr.sh的 Bash 脚本。 - 该脚本必须实现两个主要操作:
add和del,由第一个命令行参数决定。 - 对于
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)和六名学生(stu1到stu6)。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 权限的命令(如
useradd和userdel)前使用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 脚本。此脚本可以批量添加和删除用户、验证输入参数以及处理现有用户,这些都是任何系统管理员必备的技能。你已在脚本中练习了条件语句、循环、命令行参数以及 useradd 和 userdel 等外部命令的使用。



