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

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

http://www.xdnf.cn/news/11959.html

相关文章:

  • 3D动画在微信小程序的实现方法
  • C语言数据结构笔记3:Union联合体+结构体取8位Bool量
  • 109页PPT华为流程模块L1-L4级梳理及研发采购服务资产5级建模
  • 如何通过RL真正提升大模型的推理能力?NVIDIA提出长期强化学习训练框架ProRL
  • Learning a Discriminative Prior for Blind Image Deblurring论文阅读
  • nest实现前端图形校验
  • Linux磁盘管理 - RAID
  • macOS 上使用 Homebrew 安装redis-cli
  • 我们来学zookeeper -- 集群搭建
  • Monorepo架构: 项目管理模式对比与考量
  • 详解ZYNQ中的 RC 和 EP
  • 解决idea编译运行项目时间长的问题
  • 深入理解C#中的Web API:构建现代化HTTP服务的完整指南
  • Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot
  • leetcode删除排序链表中的重复元素-小白初学简单解说
  • JavaScript 深入探索:高级应用与前沿技术
  • 佰力博科技与您探讨半导体电阻测试的基本原理
  • 数据分析之OLTP vs OLAP
  • 乘用车自动驾驶和非乘用车(矿车,卡车)自动驾驶区别
  • 机器学习基础(三) 逻辑回归
  • vue3+elementplus表格表头加图标及文字提示
  • SpringBoot-15-多表查询之多对多查询可选中间表
  • 经典ReLU回归!重大缺陷「死亡ReLU问题」已被解决
  • SAP学习笔记 - 开发22 - 前端Fiori开发 数据绑定(Jason),Data Types(数据类型)
  • Doris查询Hive数据:实现高效跨数据源分析的实践指南
  • 机器翻译模型笔记
  • go语言的锁
  • React与原生事件:核心差异与性能对比解析
  • Java时间API终极指南
  • C++11 中 auto 和 decltype 的深入解析