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" ]; then
  echo "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 ]; then
        echo "用户 $username 创建成功,密码已设置."
      else
        echo "为用户 $username 设置密码失败."
        # 这里可以选择是否删除刚创建的用户
        # userdel -r "$username"
      fi
    else
      echo "创建用户 $username 失败."
    fi
  else
    echo "用户 $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已经成功设置好。脚本运行正常。

四、扩展

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

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值