Shell脚本简单练习

本文介绍了一个简单的LinuxShell脚本练习案例,通过定时任务每天创建20个特定前缀的用户,并生成相应的密码(禁止登录)。同时提供了一键删除这些用户的脚本实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一次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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值