您的位置:首页 > 运维架构 > Shell

Shell脚本简单练习

2017-07-18 00:06 489 查看

一次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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: