zoukankan      html  css  js  c++  java
  • 【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 "33[32mError Number.33[0m"
    #    exit
        read -p "请重新输入【1-9】之间的数字: " NUM
    fi
    
    read -p "Please Input Prefix: " PREFIX
    if [ -z "$PREFIX" ];then
        echo -e "33[32mError Prefix.33[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 "33[32m$USER Already Create.33[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=$'
    '
    
    # 第二种(直接回车)
    IFS='
    '
  • 相关阅读:
    Oracle中的substr()函数和INSTR()函数和mysql中substring_index函数字符截取函数用法:计算BOM系数用量拼接字符串*计算值方法
    (转载)SDRAM驱动笔记
    【转】Verilog阻塞与非阻塞赋值使用要点
    【转转】(筆記) always block內省略else所代表的電路 (SOC) (Verilog)
    (原創) 如何處理signed integer的加法運算與overflow? (SOC) (Verilog)
    [转载]亚稳态
    Dev Exprss 发布部署
    Dev splliter 去除中间的分割显示
    DevTreeList中的新增、修改的设计
    Oracle 常用网址
  • 原文地址:https://www.cnblogs.com/HeiDi-BoKe/p/11643283.html
Copyright © 2011-2022 走看看