Shell指令碼簡單練習
阿新 • • 發佈:2019-01-05
一次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