【shell脚本】创建账户及删除账户,批量创建账户及批量删除账户===autoCreateUser.sh

一、字符串运算符

 二、创建账户

1.提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的 123456 作为默认密码。

read命令参考网址:https://www.cnblogs.com/xiangzi888/archive/2012/03/27/2420084.html

[root@VM_0_10_centos shellScript]# vi autoCreateUser.sh 
#!/bin/bash
# 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户
# 不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默
# 认的 123456 作为默认密码。
read -p "Please input a username:" username
# -z 判断一个变量是否为空。如果为空,提示用户必须输入账户名并退出脚本,退出码为2
# 没有输入账户名,退出后使用$?查看返回码为2
if [ -z $username ];
then
        echo "您需要输入账户名"
        exit 2
fi
# 使用stty -echo 关闭shell的回显功能(即在命令行输入的密码为不可见)
# 使用stty echo 打开shell的回显功能
stty -echo
read -p "Please input a password:" pass
stty echo
pass=${pass:-123456}
useradd "$username"
echo "$pass" | passwd --stdin "$username"

运行脚本之前先赋予执行的权限

chmod a+x 脚本名

2.使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码本脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户名信息

#!/bin/bash
# 使用 user.txt 文件中的账户,自动创建对应的账户并配置初始密码
# 本脚本执行,需提前准备一个 user.txt 文件,该文件中包含有若干用户名信息
for i in `cat user.txt`
do
       useradd  $i
       echo "123456" | passwd ‐‐stdin $i
done

三、删除账户

使用命令删除账户(-r 连家目录一起删除)

[root@VM_0_10_centos ~]# userdel -r 账户名
# ==================================
# 删除账户及家目录
 read -p "Please enter an account to delete:" username
 if [ -z $username ];
 then
        echo "您需要输入删除的账户名"
        exit 2
 fi
 userdel -r $username
 echo "The user delete success!";
# ==================================

四、批量创建账户

通过将账户和密码写入一个txt文件,通过脚本读取创建文件中设置的账户和密码

txt文件不作解释,需要注意的一点是账户和密码之间是使用什么作为分隔符,脚本中则需要修改成对应的分隔符

[root@VM_0_10_centos shellScript]# cat createUsers.sh 
#!/bin/bash
# 通过读取users.txt文件批量添加账户
echo $0=$0
echo $1=$1
if [ $# -eq 0 ];then
    echo "[usage] 请输入批量创建的账户文件:./createUsers.sh users.txt"
    exit 0
fi
# cat命令的输出作为read命令的输入,read读到的值放入line中
cat $1 | while read line 
do
        # echo $line(输出一行信息)
    # awk -F " " 以空格分隔(如果txt中是:,则以:分隔)
    username=$(echo $line | awk -F " " '{print $1}')
    pass=$(echo $line | awk -F " " '{print $2}')
    useradd $username
    echo "$pass" | passwd --stdin "$username" 
done

五、批量删除账户

通过将账户和密码写入一个txt文件,通过脚本读取创建文件中设置的账户并删除

[root@VM_0_10_centos shellScript]# cat delUsers.sh 
#!/bin/bash
# 批量删除
echo $0=$0
echo $1=$1
if [ $# -eq 0 ];then
    echo "[usage] 请输入批量创建的账户文件:./createUsers.sh users.txt"
    exit 0
fi
# cat命令的输出作为read命令的输入,read读到的值放入line中
cat $1 | while read line 
do
    # echo $line
    # awk -F " " 以空格分隔(如果txt中是:,则以:分隔)
    username=$(echo $line | awk -F " " '{print $1}')
    userdel -r $username
done

 

六、让用户输入需要创建的用户数量和用户名前缀,使用脚本自动创建

[root@rhel8 shell]# cat input_add_user.sh 
#!/bin/bash
##########################################################################
# useradd                                                                #
# by author tanbaobao 2020/06/16                                         #
##########################################################################

# 从键盘输入
read -p "Please Input Number: " NUM
# 单个[]不支持正则表达式  ^[0-9]+$只匹配数字  ^0+$只匹配0  +表示一个或多个
if [[ ! "$NUM" =~ ^[0-9]+$ || "$NUM" =~ ^0+$ ]];then
    echo -e "\033[32mError Number.\033[0m"
#    exit
    read -p "请重新输入【1-9】之间的数字: " NUM
fi

read -p "Please Input Prefix: " PREFIX
if [ -z "$PREFIX" ];then
    echo -e "\033[32mError Prefix.\033[0m"
#    exit
    read -p "请重新输入一个字符串: " PREFIX
fi

for i in `seq $NUM`
do
    USER=$PREFIX$i
    useradd $USER
    echo "123456" | passwd --stdin $USER &>/dev/null
    if [ $? -eq 0 ];then
        echo -e "\033[32m$USER Already Create.\033[0m"
    fi
done

 七、在上面脚本基础上加一个输入密码

[root@rhel8 shell]# cat input_user_pre_pass_num.sh 
#!/bin/bash
##########################################################################
# useradd                                                                #
# by author tanbaobao 2020/06/22                                         #
##########################################################################

while :
do
    # 从键盘读取
    read -p "Please Enter prefix & password & num: [alice 12345 1]: " PREFIX PASS NUM
    printf "user infomation: 
    ------------------------------------------
    user prefix: $PREFIX
    user password: $PASS
    user num: $NUM
    ------------------------------------------
    "

    read -p "Are You Sure?[y/n]: " ACTION
    if [ "$ACTION" = "y" -o "$ACTION" = "Y" -o "$ACTION" = "yes" -o "$ACTION" = "YES" ];then
        break
    fi
done

for i in `seq -w $NUM`
do
    USER=$PREFIX$i
    id $USER &>/dev/null
    if [ $? -eq 0 ];then
        echo "user $USER already exists."
    else
        useradd $USER
        echo "$PASS" | passwd --stdin $USER &>/dev/null
        if [ $? -eq 0 ];then
            echo "$USER is created."
        fi
    fi
done

 

八、上面脚本的综合效果

准备好一个用户和密码的文件

 

[root@rhel8 shell]# cat users_pass.txt 
aa01    000000
cc02    222222
vv03 adminuser

 

[root@rhel8 shell]# cat read_txt_create_user.sh 
#!/bin/bash
##########################################################################
# useradd                                                                #
# by author tanbaobao 2020/06/22                                         #
##########################################################################


if [ $# -eq 0 ];then
    echo "Usage: `basename $0` file.txt|user"
    exit 1
fi

if [ ! -f $1 ];then
    id $1 &>/dev/null
    if [ $? -eq 0 ];then
        echo "user $1 already exists."
    else
        useradd $1
        read -p "Please set the user $1 password: " INP_PASS
        echo "$INP_PASS" | passwd --stdin $1 &>/dev/null
        if [ $? -eq 0 ];then
            echo "$1 is created."
        fi
    fi
else
    cat $1 | while read line
    do    
        # 判断文件中出现的空行问题(${#line}表示line的长度)
        # break表示跳出循环,后面的不会再执行
        # continue表示中止本次循环,执行下次循环
        if [ ${#line} -eq 0 ];then
            continue
        fi
        # 这里如果需要考虑分隔符则需要用到-F参数
        USER=`echo "$line" |awk -F" " '{print $1}'`
        PASS=`echo "$line" |awk -F" " '{print $2}'`
        echo "line: " $line
        echo "user: " $USER
        echo "pass: " $PASS
        id $USER &>/dev/null
        if [ $? -eq 0 ];then
            echo "user $USER already exists."
        else
            useradd $USER
            echo "$PASS" | passwd --stdin $USER &>/dev/null
            if [ $? -eq 0 ];then
                echo "$USER is created."
            fi
        fi
    done
fi

注意:for循环默认按空格分隔,处理文件一般不用for循环,如果需要用到其他分隔符分隔需要重新定义分隔符

 

# 内部字段分隔符
# 需要放在for循环之前
# 第一种
IFS=$'\n'

# 第二种(直接回车)
IFS='
'

 

posted @ 2019-10-10 10:32  HeiDi_BoKe  阅读(1408)  评论(0编辑  收藏  举报