一次Linux Shell脚本的简单练习
一名热心的同事提出:
每天凌晨创建20个以“xyz_”开头的用户并创建密码(不允许登陆),再生成一个一键删除这些用户的脚本。
大概思路
创建用户生成脚本,crontab定时任务每天凌晨12点执行,将用户、密码以及生成时间输出到日志文件。
创建用户删除脚本,取消crontab定时任务,读取日志文件,删除创建的用户,删除创建用户脚本,删除记录。
笨拙的脚本
在Centos 7下测试。
#!/bin/sh
#“here document”将ADD内容输出到”opt“目录下的useradd.sh
cat << 'ADD' > /opt/useradd.sh
#!/bin/sh
#记录时间
echo "Time:`date`" >> /var/log/useradd.log
for n in `seq 1 20`;do
user="xyz_${RANDOM}"
passwd=`date +%s | sha256sum | head -c 16`
useradd -s /sbin/nologin ${user}
echo "${passwd}" | passwd --stdin ${user}
#将用户名和密码输出到"/var/log/useradd.log"
echo -e "user:${user}\npasswd:${passwd}\n" >> /var/log/useradd.log
done
ADD
#ADD的内容到此结束
#赋予useradd.sh执行权限
chmod +x /opt/useradd.sh
#每天凌晨12点执行
echo "0 0 * * * root /opt/useradd.sh > /dev/null 2>&1" >> /etc/crontab
#开始我们的删除用户脚本
cat << 'DEL' > /opt/userdel.sh
#!/bin/sh
#逐行读取useradd.log,给list
for list in `cat /var/log/useradd.log`; do
#简单判断一下,读取的这行是不是我们的用户名
if [ ${list:0:5} = user: ]; then
#获得用户名并删除用户
username=`echo ${list} | sed 's/user://g'`
userdel -r ${username}
fi
done
#删除定时执行
sed -i '\/opt\/useradd.sh/d' /etc/crontab
#清理
rm /opt/useradd.sh
rm /var/log/useradd.log
rm $0
DEL
#DEL的内容到此结束
#同样,赋予执行权限
chmod +x /opt/userdel.sh
rm $0