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

Linux系统运维脚本:批量创建linux用户和密码(读取文件中的账号和密码来批量创建用户)

目           录

一、要求

二、解决方案

(一)解决思路

(二)方案

三、脚本程序实现

(一)脚本代码和解释

1、脚本代码

2、代码解释

(二)脚本验证

1、脚本编辑

2、给予执行权限

3、运行脚本,查看效果

四、扩展


一、要求

        有时候,在安装一个linux系统后,要创建很多用户,账户名不同、密码不同,这就非常麻烦。有没有办法,直接把客户给我们的账号密码表直接读出来,然后通过一个命令完成所有的操作?

二、解决方案

(一)解决思路

        可以写一个bash脚本,一行行的读取账户密码文件,解析出账号名和密码,然后再调用useradd和passwd等命令,来添加账号和密码。

(二)方案

       (1)把账号密码表文件的内容进行格式化,以便脚本可以直接读取;

       (2)判断文件存在性;

       (3)判断用户是否存在;

       (4)遍历文件,读出账号名和密码;

       (5)调用useradd和passwd添加用户和密码到系统中。

三、脚本程序实现

        直接把脚本写出来,分享给大家。

(一)脚本代码和解释

1、脚本代码

        由于我的环境是centos7.9,编写如下bash代码,可以在centos7以后得版本运行,如下:

#!/bin/bash
#提前准备账号密码文件 userlist.txt
#文件内每个账号密码组,使用逗号分隔(username,password)# 检查userlist.txt文件是否存在
if [ ! -f "userlist.txt" ]; thenecho "userlist.txt 文件不存在."exit 1
fi# 从userlist.txt中读取用户和密码并创建用户
while IFS=, read -r username password; do# 检查用户是否已存在if ! id "$username" &>/dev/null; then# 创建用户if useradd "$username" &>/dev/null; then# 设置密码echo "$password" | passwd --stdin "$username"if [ $? -eq 0 ]; thenecho "用户 $username 创建成功,密码已设置."elseecho "为用户 $username 设置密码失败."# 这里可以选择是否删除刚创建的用户# userdel -r "$username"fielseecho "创建用户 $username 失败."fielseecho "用户 $username 已存在."fi
done < "userlist.txt"

2、代码解释

        脚本的目的是从一个名为`userlist.txt`的文件中读取用户名和密码,并尝试在系统中创建对应的用户并设置密码 。 解释如下:

1). `if [ ! -f "userlist.txt" ]; then`

       * 这是一个条件判断语句,检查`userlist.txt`文件是否存在。`-f`是一个测试运算符,用于检查指定的文件是否存在且是一个常规文件。

       * `!`是一个逻辑非运算符,用于反转条件的结果。因此,`! -f "userlist.txt"`将返回真(即非零退出状态),如果`userlist.txt`文件不存在。

2). `echo "userlist.txt 文件不存在."`

       * 如果上面的条件为真(即`userlist.txt`不存在),则输出错误信息。

3). `exit 1`

       * 如果`userlist.txt`不存在,脚本将立即退出,并返回状态码1,表示出现错误。

4). `fi`

       * 表示`if`语句的结束。

5). `while IFS=, read -r username password; do`

       * 这是一个`while`循环,用于逐行读取`userlist.txt`文件的内容。

       * `IFS=,`设置了内部字段分隔符(Internal Field Separator)为逗号,这意味着`read`命令会将每行内容按照逗号分隔成不同的字段。

       * `read -r username password`读取每行的内容,并将其分别赋值给`username`和`password`变量。`-r`选项使`read`命令不解释反斜杠转义字符。

6). `if ! id "$username" &>/dev/null; then`

       * 检查用户是否已经存在。`id`命令用于获取用户的UID(用户ID)和GID(组ID)。如果用户不存在,`id`命令会返回一个非零的退出状态。

       * `&>/dev/null`是一个重定向,它将标准输出和标准错误都重定向到`/dev/null`,这意味着任何由`id`命令产生的输出或错误消息都会被丢弃,脚本不会显示它们。

7). `if useradd "$username" &>/dev/null; then`

       * 如果用户不存在,则尝试使用`useradd`命令创建新用户。

       * 同样,`&>/dev/null`用于丢弃任何输出或错误消息。

8). `echo "$password" | passwd --stdin "$username"`

       * 如果用户创建成功,则使用`passwd`命令和`--stdin`选项设置用户的密码。这里使用了管道(`|`),它将`echo`命令的输出(即密码)作为`passwd`命令的输入。

9). `if [ $? -eq 0 ]; then`

       * 检查上一个命令(即`passwd`)的退出状态。在bash中,`$?`保存了上一个命令的退出状态。退出状态0通常表示命令成功执行,非零值表示出错。

10). `echo "用户 $username 创建成功,密码已设置."`

       * 如果`passwd`命令成功执行(即退出状态为0),则输出成功信息。

11). `else`

       * 如果`passwd`命令执行失败(即退出状态非零),则执行以下语句。

12). `echo "为用户 $username 设置密码失败."`

       * 输出密码设置失败的信息。

       * 注释中提到了可以选择删除刚创建的用户,但脚本中没有实现这一操作。

13). `fi`

       * 表示第一个`if`语句(即检查用户是否存在并尝试创建用户的语句)的结束。

14). `else`

       * 如果用户已经存在,则执行以下语句。

15). `echo "用户 $username 已存在."`

       * 输出用户已存在的信息。

16). `fi`

       * 表示第二个`if`语句(即检查用户是否已存在的语句)的结束。

17). `done < "userlist.txt"`

       * 表示`while`循环的结束,并从`userlist.txt`文件中读取下一行内容。这个重定向(`<`)使得`while`循环能够从`userlist.txt`文件中逐行读取内容。

(二)脚本验证

1、脚本编辑

        使用编辑器,比如vi,把代码输入进去;

        保存这个脚本到一个文件中,比batch_create_user.sh

2、给予执行权限

      chmod +x w batch_create_user.sh

3、运行脚本,查看效果

     可以运行这个脚本来检查进程的运行情况,如下:


[root@localhost home]#
[root@localhost home]#
[root@localhost home]# cat userlist.txt
user-1,test123
user-2,test223
user-3,test323
[root@localhost home]#
[root@localhost home]#
[root@localhost home]# cat /etc/passwd | awk -F: '$3>1000 {print $1}'
home
user6
[root@localhost home]#
[root@localhost home]#
[root@localhost home]# sh batch_create_user.sh
更改用户 user-1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
用户 user-1 创建成功,密码已设置.
更改用户 user-2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
用户 user-2 创建成功,密码已设置.
更改用户 user-3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
用户 user-3 创建成功,密码已设置.
[root@localhost home]#
[root@localhost home]#
[root@localhost home]# cat /etc/passwd | awk -F: '$3>1000 {print $1}'
home
user6
user-1
user-2
user-3
[root@localhost home]#

从实际运行可以看出,user-1,user-2,user-3已经成功设置好。脚本运行正常。

四、扩展

        在实际使用中, 可能还要设置用户的其他公有属性,可以直接添加到脚本中。

        另外,需要注意的是,密码是作为明文放到文件中的,分发给每个人的时候,要求大家一定要更改密码。可以编写一个脚本,检验用户是否更改了密码,具体如何做就不累述了。

相关文章:

Linux系统运维脚本:批量创建linux用户和密码(读取文件中的账号和密码来批量创建用户)

目 录 一、要求 二、解决方案 &#xff08;一&#xff09;解决思路 &#xff08;二&#xff09;方案 三、脚本程序实现 &#xff08;一&#xff09;脚本代码和解释 1、脚本代码 2、代码解释 &#xff08;二&#xff09;脚本验证 1、脚本编辑 2、给予执行权…...

重力坝廊道量水堰计与堰板安装技术指南

在水利工程中&#xff0c;重力坝廊道量水堰计的安装是确保水资源有效监测与管理的关键环节。本文将详细阐述量水堰计及量水堰板的安装方法&#xff0c;以确保安装质量&#xff0c;提高水资源利用效率。 一、量水堰计的安装位置 量水堰计应安装在堰板的上游&#xff0c;距离堰板…...

ButterKnife实现之Android注解处理器使用教程

ButterKnife实现之Android注解处理器使用教程 1、新建一个注解 1.1、编译时注解 创建注解所需的元注解Retention包含3个不同的值&#xff0c;RetentionPolicy.SOURCE、RetentionPolicy.CLASS、RetentionPolicy.RUNTIME。这3个值代表注解不同的保留策略。 使用RetentionPolic…...

【哈希】Leetcode 128. 最长连续序列 【中等】

最长连续序列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例 1&#xff1a;输入&#xff1a;nums [100,4,200,1,3,2]输出&#x…...

回溯是怎么回事(算法村第十八关青铜挑战)

组合 77. 组合 - 力扣&#xff08;LeetCode&#xff09; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],…...

向爬虫而生---Redis 探究篇5<Redis集群刨根问底(1)>

前言: Redis集群是一种可靠和高性能的分布式数据库解决方案。随着互联网的迅速发展和数据规模的增长,传统的单机Redis已经无法满足大规模应用的需求。Redis集群的出现填补了这一空白,提供了更高的可扩展性和容错性。 大家都知道,Redis是一种基于内存的高性能键值存储数据库,…...

系统集成Prometheus+Grafana

根据产品需求在自己的系统中添加一个系统监控的页面&#xff0c;其中有主机信息的显示&#xff0c;也有一些业务信息的显示。调研后的方案是 主机信息通过Prometheus采集和存储&#xff0c;业务信息通过自己系统的调度任务统计后存储在Mysql中&#xff0c;使用Grafana对接Prome…...

实例驱动计算机网络

文章目录 计算机网络的层次结构应用层DNSHTTP协议HTTP请求响应过程 运输层TCP协议TCP协议面向连接实现TCP的三次握手连接TCP的四次挥手断开连接 TCP协议可靠性实现TCP的流量控制TCP的拥塞控制TCP的重传机制 UDP协议 网际层IP协议&#xff08;主机与主机&#xff09;IP地址的分类…...

Unity 报错:SSL CA certificate error

使用UnityWebRequest时出现如下报错&#xff1a; SSL CA certificate error Curl error 60: Cert verify failed: UNITYTLS_X509VERIFY_FLAG_USER_ERROR1 原因&#xff1a; 证书验证失败 和 SSL CA证书错误 解决方法&#xff1a; 创建一个如下的类&#xff1a; /// <…...

算法刷题Day1 | 704.二分查找、27.移除元素

目录 0 引言1 二分查找1.1 我的解题1.2 修改后1.3 总结 2 移除元素2.1 暴力求解2.2 双指针法&#xff08;快慢指针&#xff09; &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;代码随想录算法训练营第一天…...

大数据技术学习笔记(五)—— MapReduce(2)

目录 1 MapReduce 的数据流1.1 数据流走向1.2 InputFormat 数据输入1.2.1 FileInputFormat 切片源码、机制1.2.2 TextInputFormat 读数据源码、机制1.2.3 CombineTextInputFormat 切片机制 1.3 OutputFormat 数据输出1.3.1 OutputFormat 实现类1.3.2 自定义 OutputFormat 2 Map…...

北斗导航 | 同步双星故障的BDS/GPS接收机自主完好性监测算法

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 同步双星故障的BDS/GPS接收机自主完好性监测算法 1 引言2 同步双星故障…...

2024金三银四必看前端面试题!简答版精品!

文章目录 导文面试题 导文 2024金三银四必看前端面试题&#xff01;2w字精品&#xff01;简答版 金三银四黄金期来了 想要跳槽的小伙伴快来看啊 面试题 基于您给出的方向&#xff0c;我将为您生成20个面试题和答案。请注意&#xff0c;由于面试题的答案可能因个人经验和理解而…...

Python-sklearn.datasets-make_blobs

​​​​​​sklearn.datasets.make_blobs()函数形参详解 """ Title: datasets for regression Time: 2024/3/5 Author: Michael Jie """from sklearn import datasets import matplotlib.pyplot as plt# 产生服从正态分布的聚类数据 x, y, cen…...

[最佳实践] conda环境内安装cuda 和 Mamba的安装

Mamba安装失败的过程中&#xff0c;causal-conv1d安装报错为连接超时 key word: vision mamba&#xff0c; DL &#xff0c;深度学习 &#xff0c;mamba unet&#xff0c;mamba环境安装 Mamba安装 主要故障是 pip install causal-conv1d1.2.0和 pip install mamba-ssm1.2.0 安…...

【算法】顺时针打印矩阵(图文详解,代码详细注释

目录 题目 代码如下: 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则打印出数字:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 这一道题乍一看,没有包含任何复杂的数据结构和…...

蚂蚁感冒c++

题目 思路 “两蚂蚁碰面会掉头&#xff0c;若其中一只蚂蚁感冒了&#xff0c;会把感冒传染给碰到的蚂蚁”&#xff0c;这句话看作是“两蚂蚁碰面会互相穿过&#xff0c;只是把感冒的状态传给了另一只蚂蚁”&#xff0c;因为哪只蚂蚁感冒了并不是题目的重点&#xff0c;重点是有…...

python Plotly可视化

文章目录 Plotly常用函数PolarPlotlymake_subplotsadd_tracego.Scatterpolarglupdate_tracesupdate_layout综合示例 完整版 Python在数据可视化方面有着丰富的库和函数&#xff0c;其中一些常用的库包括 Matplotlib、Seaborn、Plotly、Bokeh等。 Plotly是一个交互式绘图库&…...

刷题第10天

代码随想录刷题第10天 |● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 239. 滑动窗口最大值 唉&#xff0c;好难&#xff0c;先记个思路吧 class Solution { private:class MyQueue { //单调队列&#xff08;从大到小&#xff09;public:deque<int> que; // 使用deq…...

Bililive-go 实现直播自动监控录制

前言 最近有直播录制的需求&#xff0c;但是自己手动录制太麻烦繁琐&#xff0c;于是用了开源项目Bililive-go进行全自动监控录制&#xff0c;目前这个项目已经有3K stars了 部署 为了方便我使用了docker compose 部署 version: 3.8 services:bililive:image: chigusa/bilil…...

【Redis】Redis持久化模式RDB

目录 引子 RDB RDB的优缺点 小节一下 引子 不论把Redis作为数据库还是缓存来使用&#xff0c;他肯定有数据需要持久化&#xff0c;这里我们就来聊聊两种持久化机制。这两种机制&#xff0c;其实是 快照 与 日志 的形式。快照:就是当前数据的备份&#xff0c;我可以拷贝到磁…...

Java基础 - 模拟医院挂号系统

模拟医院挂号系统功能 1. 科室管理&#xff1a;新增科室&#xff0c;删除科室&#xff08;如果有医生在&#xff0c;则不能删除该科室&#xff09;&#xff0c;修改科室 2. 医生管理&#xff1a;录入医生信息以及科室信息&#xff0c;修改医生信息&#xff08;主要是修改个人…...

【论文精读】基于知识图谱关系路径的多跳智能问答模型研究

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…...

uni app 微信小程序微信支付

使用方法 接口传参 使用wx.requestPayment方法是一个统一各平台的客户端支付API&#xff0c;不管是在某家小程序还是在App中&#xff0c;客户端均使用本API调用支付...

Dgraph 入门教程一《 概览》

1、Dgraph的特点 (1) 分布式规模&#xff1a;可以发布和处理大量数据 (2)支持GraphQL:一种内置的查询语法&#xff0c;类似SQL。可以让数据操作起来更简单 (3)完全的事务处理和ACID兼容&#xff1a;满足OLTP工作负载&#xff0c;该负载要求频繁的插入和更新数据。 (4)支持多…...

VSCode安装

前言 Visual Studio Code 是一个轻量级功能强大的源代码编辑器&#xff0c;支持语法高亮、代码自动补全&#xff08;又称 IntelliSense&#xff09;、代码重构、查看定义功能&#xff0c;并且内置了命令行工具和 Git 版本控制系统。适用于 Windows、macOS 和 Linux。它内置了对…...

STM32各外设初始化步骤

1、GPIO初始化步骤 1、使能GPIO时钟 2、初始化GPIO的输入/输出模式 3、设置GPIO的输出值或获取GPIO的输入值 GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin…...

10. Nginx进阶-Return

简介 什么是Return&#xff1f; nginx的return指令是用于在nginx配置文件中进行重定向或返回特定的HTTP响应码的指令。 它可以根据不同的条件来执行不同的操作&#xff0c;如重定向到其他URL、返回指定的HTTP响应码或自定义响应内容等。 Return适用范围 return指令只能在se…...

Nircmd集成定时执行专家之后的使用场景

Nircmd工具拥有了定时执行功能之后&#xff0c;可以用于以下场景&#xff1a; 1. 自动化日常工作 定时清理系统垃圾文件定时备份重要文件定时关闭或重启电脑定时发送邮件或短信定时执行其他程序或脚本 2. 监控系统状态 定时检查系统温度定时检查磁盘空间定时检查网络连接定时…...

Java面试题【必知必会】Linux常用命令面试题(2024)

近期一直在准备面试&#xff0c;所以为了巩固知识&#xff0c;也为了梳理&#xff0c;整理了一些java的基础面试题&#xff01;同时也希望各位英雄和女侠能够补充&#xff01;不胜荣幸&#xff01;&#xff01;&#xff01; 名称地址Java面试题【必知必会】基础&#xff08;202…...