1.添加用户命令 useradd 后接用户名,本文为如何批量添加用户,添加登录密码,并设定下次登录要求用户强制修改密码并给出相关提示,

首先本项目运行结果如下:

在linux系统中默认存放用户账户信息的文件为 /etc/passwd,我们可以cat 查看都有什么

输出字样如下:(此处只显示前两行)

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

 每行以:分割,共7个字段,按顺序为: 1.用户名: 2.密码: 3.UID(用户ID) :4.GID(组ID):5.描述信息:6.家目录:7.默认shell

 同样,密码存放在影子文件/etc/shadow中:(此处显示前两行)

 cat /etc/shadow
root:$6$3tCziLRo8Mlp0oOT$RgLwZHiWNt7F6S8vCJXycxVsF.otwDSG9BrbaODnvgOazKPnfjSxdTE2D6D90s5tmkuCU9cxFmtMBosX8VcNZ1::0:99999:7:::
bin:*:18353:0:99999:7:::

被:划分为9个字段: 1.用户名 :2.加密密码:3. 最后一次修改时间: 4.最小修改时间间隔: 5.密码有效期: 6.密码需要变更前的警告天数: 7.密码过期后的宽限时间: 8.账号失效时间: 9.保留字段

其中现linux加密密码采用SHA512散列加密算法

现对shell进行书写:

首先要读取用户输入,为了可以回退在之前添加stty erase ^H,使回退不产生^H

然后用 read -p "" i 读取用户输入并赋给i,read -p "" n 读取用户输入并赋给n,

此处的目的为定义产生用户编号的范围;

declare -i success=0为声明,定义目的为为了接下来判断进行计数

然后写入循环:此处用for循环,循环中嵌套if,给予创建结果相关提升;

循环格式:for(()) ;do;done   判断格式:if ;then;else;fi,同一行要用;隔开,换行则不用加';'

如果创建了用户, 就& >/dev/null;其中 & >/dev/null为将产生的数据放入到null中,null为''黑洞'',>为重定向,所有重定向到此处的数据将会消失,一般可以用来处理系统报错提示等,否则可能会影响代码正常运行

user_为固定显示后$i为用户编号,每次循环+1,通过 passwd --stdin 设置密码 此处为0718c$i

for(( i;i<=n;i++ ))
do
if useradd user_$i &>/dev/null;then
    echo "user_$i,创建成功!"
    echo "0718@$i"|passwd --stdin 0718c$i &>/dev/null
    echo -e "user_$i的密码为:\033[32m0718c$i\033[0m"
    # 设置下次登录强制改密码
    passwd -e user_$i >/dev/null
    usermod -G lk_0718 user_$i
    echo
    let success++
else
     pw=`cat /etc/shadow|grep -w "user_$i" |cut -d ":" -f 3`
     chd=`date -d "1970-01-01 $pw days"`
     echo -e "用户:\033[33m "user_$i" \033[0m已存在!;创建日期为:${chd: 0:17}"
fi
done

passwd -e 为设置下次登录强制改密码

usermod -G lk_0718 user_$i 为将指定用户添加到 lk_0718这个组中

如果次处都运行到了,则 let succes++作为记录成功数量

否则执行else: else中pw为查看影子文件的第3列,最后修改的时间将已提示存在及时间的形式输出

chd变量为change date的意思:就是我定义一个显示时间的变量,最后用date -d "1970-01-01" days形式输出 1970-01-01为格林尼治时间(GreenwichMeanTime,GMT)

${chd: 0:17}为从0到17的范围截取输出;提取有用信息

最后输出指定生成数量,成功数量

以1+"$n-$s"|bc来计算指定数量,success为成功数量,所以在之前获取输入的时候要将$i赋给s

下面是完整代码:

#!/bin/bash
clear
echo "---|      批量创建用户    |---"
stty erase ^H
read -p "input start_num:" i
s=$i
read -p "input end_num:" n
declare -i success=0
#groupadd lk_0718
echo "用户创建中..."
sleep 0.5
for(( i;i<=n;i++ ))
do
if useradd user_$i &>/dev/null;then
    echo "user_$i,创建成功!"
    echo "0718@$i"|passwd --stdin 0718c$i &>/dev/null
    echo -e "user_$i的密码为:\033[32m0718c$i\033[0m"
    # 设置下次登录强制改密码
    passwd -e user_$i >/dev/null
    usermod -G lk_0718 user_$i
    echo
    let success++
else
     pw=`cat /etc/shadow|grep -w "user_$i" |cut -d ":" -f 3`
     chd=`date -d "1970-01-01 $pw days"`
     echo -e "用户:\033[33m "user_$i" \033[0m已存在!;创建日期为:${chd: 0:17}"
fi
done
echo -e "指定创建了:\033[33m `echo "1+$n-$s"|bc` \033[0m个用户!成功添加了:\033[32m "$success "\033[0m个用户!"

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐