shell脚本一步完成批量创建删除Linux用户
1. while
循环
核心概念
-
当满足条件时持续执行,不关心循环次数,只关注循环条件。
-
适用场景:循环次数未知(如读取文件直到结束)、依赖外部状态(如等待用户输入)。
2. for
循环
核心概念
-
遍历可迭代对象(列表、字符串、范围等),循环次数通常由序列长度决定。
-
适用场景:已知迭代次数、遍历集合元素。
关键区别总结
特性 | while 循环 | for 循环 |
---|---|---|
循环控制 | 基于条件表达式 | 基于可迭代对象的元素遍历 |
循环次数 | 未知(可能无限) | 已知(由序列长度决定) |
变量初始化 | 需在循环外手动初始化控制变量 | 自动从可迭代对象中取值 |
条件更新 | 需在循环体内手动更新条件变量 | 自动移动到下一个元素 |
典型用途 | 条件驱动(如游戏主循环、实时监控) | 数据遍历(如列表、字典处理) |
死循环风险 | 高(若忘记更新条件) | 低(遍历完自动结束) |
何时选择?
-
用
while
:-
循环次数不确定(例如:直到用户输入正确)。
-
条件依赖外部变化(例如:监测传感器数据是否达标)。
-
-
用
for
:-
明确知道要遍历的集合(如列表、字符串)。
-
需要固定次数的循环(如执行 10 次操作)。
-
-
进阶说明
-
互换性:理论上
while
能实现所有for
的功能(反之亦然),但选择合适的关键字让代码更清晰。 -
break
/continue
:两者均可使用。 -
无限循环:
while True:
常用于需永久运行的场景(如服务器监听)。
这两个脚本使用的是shell脚本中的while循环语句,同样还有for循环,用法是一样的。
#!/bin/bash
PREFIX="stu"
i=1
while [ $i -le 100 ]
do # 检查用户是否已存在
if ! id "${PREFIX}$i" &>/dev/null; thenuseradd "${PREFIX}$i" 2>/dev/nullelseecho "用户 ${PREFIX}$i 已存在,跳过创建" >&2
filet i++
doneecho
if id stu100 &>/dev/null
thenecho "已成功创建stu1到stu100用户"
elseecho "出现错误,请检查用户权限是否为root"
fi
下为批量删除Linux用户
等号前被称为变量如(RUSER="stu"),在括号中" "里的是给变量赋的值,称为变量值,变量值可以随情况而变化。
#!/bin/bash
# 必须使用root权限执行
if [ "$(id -u)" != "0" ]; thenecho "错误:此脚本必须以root用户运行" >&2exit 1
fiRUSER="stu"
i=1
deleted_count=0while [ $i -le 200 ]
dousername="${RUSER}$i"# 检查用户是否存在if id "$username" &>/dev/null; then# 存在则删除if userdel -r "$username" &>/dev/null; thenlet deleted_count++elseecho "删除失败: $username" >&2fielseecho "用户不存在: $username" >&2filet i++
done# 准确的结果报告
if [ $deleted_count -eq 200 ]; thenecho "已成功删除所有stu1到stu200用户"
elif [ $deleted_count -gt 0 ]; thenecho "部分删除完成:成功删除 $deleted_count 个用户"
elseecho "没有删除任何用户" >&2
fi