linux批量创建用户脚本

在啃鸟哥的linux私房菜这本书,看到后面发现前面学的渐渐忘记了. 为了熟悉一些命令, 练习一下shell脚本 在14章看到的批量新建帐号范例,就学着,写一下练练手。  下面的代码有注释 照着鸟哥写的,稍加改动 符合学校的编制。

一.批量创建帐号并将信息保存至文件

没有像书上提供可选择密码生成方式,密码是和帐号一样,并设置了登录以后强制用户更改密码,觉得这种方案更安全

#!/bin/bash
#
#this program use to add account for your linux
#referece: vbird's private dish.
#
#History: 2017/04/13


#保存帐号密码文件
accountfile="user.passwd"

read -p "输入年级:如(2015):"  username_grade
read -p "输入班级号:如(1122):" username_class
read -p "输入编号位数:如(2):" nu_nu
read -p "输入起始号码:如(1):" nu_start
read -p "输入帐号数量:如(10):" nu_amount

if [ "$username_grade" == "" -o "username_class" == "" ]; then  
    echo "请输入年级班级信息!";
    exit 1
fi

#判断数字是否合法
testing0=$(echo $nu_nu | grep '^0-9')
testing1=$(echo $nu_start | grep '^0-9')
testing2=$(echo $nu_amount | grep '^0-9')

if [ "$testing0" != "" -o "$testing1" != "" -o "$testing2" != "" ]; then
    echo "输入的数字不对!";
    exit 1
fi 

#如果文件存在重命名加上日期
[ -f "$accountfile" ] && mv $accountfile "$accountfile"$(date +%Y%m%d%s)

nu_end=$(($nu_start+$nu_amount-1))

for((i=$nu_start; i<=$nu_end; i++))
do 
    #${i} 统计数字i的长度
    nu_len=${#i}
    if [ $nu_nu -lt $nu_len ]; then
    echo "输入不合理,编号位数不足或帐号数量过多!"
    echo "please check it out"
    exit 1
    fi
    
    #需要在编号前面补零的位数
    nu_diff=$(($nu_nu - $nu_len))
    
    nu_nn=""
    if [ "$nu_diff" != "0" ]; then
    nu_nn=0000000000
    nu_nn=${nu_nn:1:$nu_diff}
    fi
    
    #将以上信息年级,班级,序号拼接起来组成一个帐号
    account=${username_grade}${username_class}${nu_nn}${i}
    password="$account"
    
    #帐号密码写入文件
    echo 帐号:"$account":密码:"$password" | tee -a "$accountfile"
done

#新建帐号密码
usernames=$(cat "$accountfile" | cut -d':' -f2)

for u in $usernames
do
    useradd $u
    echo $u | passwd --stdin $u
    #强制登录修改密码
    chage -d 0 $u
    
done

echo "Ok! 新建$nu_amount个账户."

二.从刚才保存的文件批量删除刚才创建的帐号

手残建错了怎么办,批量删除刚才的帐号

#!/bin/bash
 # to del the user from file
 
usernames=$(cat user.passwd | cut -d':' -f2)
 for username in $usernames
 do
    echo "删除用户$username"
     userdel -r $username
 done

      

附上鸟哥书上提供的原版地址http://linux.vbird.org/linux_basic/0410accountmanager/account2.sh 我没有重复造轮子,我只是在练习。

0

Powered by Jekyll and Theme by solid