一、需求
用户给出用户名文件,文件里都是用户名,根据文件名创建用户
提示按1,创建名单中的用户。不加序号。
提示按2,批量创建用户,然后用户输入创建用户个数,最后创建的用户是a1,a2这种形式。
查用户是否存在,存在提示存在,不存在创建.
二、脚本如下
#!/bin/bash
#versino-v3-batch
>tmp_name.txt
master() {
if [ $num -eq 1 ]
then
one_user
elif [ $num -eq 2 ]
then
read -p "请输入创建用户的数量" num1
many_user
else
echo "无效选择退出"
fi
}
one_user() {
path=/root/lidao/suiji_user/useradd
for i in `cat $file`
do
awk -F: '{print $1}' /etc/passwd | grep -w "$i" &> /dev/null
if [ $? -eq 0 ]
then
echo "$i 用户已存在,请修改"
else
pass=`tr -cd 'a-z' </dev/urandom | head -c8`
useradd $i
echo $pass |passwd --stdin $i &> /dev/null && echo "$i 创建成功,密码是$pass"
echo "$i 创建成功,密码是$pass" >> $path/pass.txt
fi
done
}
many_user() {
>tmp_name.txt
path=/root/lidao/suiji_user/useradd
for c in `cat $file`
do
for a in `seq 1 $num1`
do
echo $c$a >> tmp_name.txt
done
done
for b in `cat tmp_name.txt`
do
awk -F: '{print $1}' /etc/passwd | grep -w "$b" &> /dev/null
if [ $? -eq 0 ]
then
echo "$b 用户已经存在"
else
pass=`tr -cd 'a-z' </dev/urandom | head -c8`
useradd $b
echo $pass |passwd --stdin $b &> /dev/null && echo "$b 创建成功,密码是$pass"
echo "$b 创建成功,密码是$pass" >> $path/pass.txt
fi
done
}
read -p "请输入增加用户的文件名" file
read -p "按1批量创建1个用户,按2批量创建多个用户" num
case $num in
1)
master
;;
2)
master
;;
*)
;;
esac
三、执行结果
四、脚本分析
主菜单case选择1和2
分为master主模块,one_user添加一个用户模块,many_user批量添加多个用户模块
Master模块是主流程,选择1,执行one_user模块,选择2,执行many_user模块,其余按键无效。
one_user模块,for读取file文件,检测文件中的用户名/etc/passwd是否存在,如果存在,提示存在,不存在则创建,并把密码用户名和密码记录在pass.txt文件中
many_user模块,循环套循环得到加序号的用户名(for读取file文件,里面的for是用户输入的数字循环,外面for转一圈,也就是用户名,里面的for转n圈,这样就形成a1,a2,a3这种用户名),最后把它记录在tmp_name.txt文件中,是临时创建的用户名名单,再用for读取这tmp_name.txt文件,先检测tmp_name.txt文件中的用户名在/etc/passwd是否存在,如果存在,提示存在,否则创建用户。
以上说的模块其实就是函数。