当前位置: 首页 > 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…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

webpack面试题

面试题&#xff1a;webpack介绍和简单使用 一、webpack&#xff08;模块化打包工具&#xff09;1. webpack是把项目当作一个整体&#xff0c;通过给定的一个主文件&#xff0c;webpack将从这个主文件开始找到你项目当中的所有依赖文件&#xff0c;使用loaders来处理它们&#x…...

大模型真的像人一样“思考”和“理解”吗?​

Yann LeCun 新研究的核心探讨&#xff1a;大语言模型&#xff08;LLM&#xff09;的“理解”和“思考”方式与人类认知的根本差异。 核心问题&#xff1a;大模型真的像人一样“思考”和“理解”吗&#xff1f; 人类的思考方式&#xff1a; 你的大脑是个超级整理师。面对海量信…...

比较数据迁移后MySQL数据库和ClickHouse数据仓库中的表

设计一个MySQL数据库和Clickhouse数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

Modbus转Ethernet IP深度解析:磨粉设备效率跃升的底层技术密码

在建材矿粉磨系统中&#xff0c;开疆智能Modbus转Ethernet IP网关KJ-EIP-101的应用案例是一个重要的技术革新。这个转换过程涉及到两种主要的通信协议&#xff1a;Modbus和Ethernet IP。Modbus是一种串行通信协议&#xff0c;广泛应用于工业控制系统中。它简单、易于部署和维护…...

Vuex:Vue.js 应用程序的状态管理模式

什么是Vuex&#xff1f; Vuex 是专门为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 在大型单页应用中&#xff0c;当多个组件共享状态时&#xff0c;简单的单向数据流…...