1. 程式人生 > >Shell指令碼簡單練習

Shell指令碼簡單練習

一次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