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