天天看點

shell腳本(批量建立使用者)

                                             shell腳本批量建立使用者

            有些面試題中會問到批量建立使用者的題目,大體是用循環去進行建立,但有時也會有一些額外的附加條件,一起來看看今天的知識點吧。

需求:

1、自定義使用者,不要有特殊字元:user01,user02

2、最多建立100個使用者,要求數字等位對齊。例:1-99  01,02,03....99

3、輸入使用者名和使用者數目時最多給予三次機會

4、建立随機的8位密碼,大寫兩個數字三個沒有特殊字元,并将使用者名密碼對應放到user_pass.txt中

分析:

1、建立自定義使用者使用read -p 鍵盤輸入即可,使用者數目也一樣

2、數字等位對齊seq -w number 可以實作

3、給予三次輸入機會,在比對不成功後做運算判斷即可

4、建立随機的密碼需要先安裝expect工具,用法:mkpasswd -l 指定長度 -d 指定幾個數字 -s 指定幾個特殊字元 -C 指定幾個大寫字母

#!/bin/bash
##########
#user_add
#dingxiang
############
#建立使用者三次機會
for i in `seq 3`
do
read -p "please enter creat user name: "  name
#如果name比對a-Z0-9則跳出循環繼續執行
        if [[ $name =~ [a-Z0-9] ]];then
                break
        else
#一共三次機會,3-$i,循環到第三次,運算結果為0則退出程式
                name_chance=`echo $[3-i]`
                if [ "$name_chance" == "0" ];then
                        echo "Number exhausted,please try again later"
                        exit
                else
                        echo "please enter realy user name,There's still $name_chance chance left"
                fi
        fi
done

#輸入使用者數量三次判斷
for j in `seq 3`
do
read -p "please enter creat user number(1-100): " num
        if [[ $num =~ ^[1-9]$ ||  $num =~ ^[1-9][0-9]$  || $num =~ ^[1][0][0]$ ]];then
                        break
                else
#一共三次機會,3-$i,循環到第三次,運算結果為0則退出程式
                num_chance=`echo $[3-j]`
                if [ "$num_chance" == "0" ];then
                        echo "Number exhausted,please try again later"
                        exit
                else
                        echo "please enter realy user number(1-100),There's still $num_chance chance left"
                fi
        fi
done

#列印使用者名和建立數量,給予最後确認。
printf "
        user-name: $name
        user-number: $num
"

#如果$cho為y則建立使用者,否則退出程式
read -p "Are you sure to create user?(y/n): " cho
        if [ "$cho" == "y" ];then
                for u in `seq -w $num`
                do
#将要建立的使用者名寫成變量
                user=${name}${u}
#随機密碼定義成變量
                pass=`mkpasswd -l 8 -d 3 -s 0 -C 2`
#檢查使用者是否存在,使用者存在,傳回碼$?為0時,跳出本次循環。
                  id $user &>/dev/null
                        if [ $? -eq 0 ];then
                                echo "user $user already exists"
                                continue
                        else
#使用者不存在的則建立使用者,并且将使用者名密碼導入到user_pass.txt中
                                useradd $user
                                echo $pass | passwd --stdin $user &>/dev/null
                                echo "${user}___${pass}" >> user_pass.txt
                                echo "$user is creat ok......."
                        fi 
               done
#不需要建立使用者,退出程式
        else
                echo "normal exit~"
                exit
        fi