前幾天朋友問我說再Linux下如何大量修改密碼,之前常看到網路上有人寫如何大量新增帳號,我的想法是,應該可以直接拿其中一部分程式做修改應該做的到,隨後自己就練功寫了一個:
#!/bin/sh
USERFILE=”./user.txt” #User帳號
LINE=wc -l $USERFILE | cut -d ' ' -f 1
#算出幾個User
for ((i=1; i < = $LINE ; i=i+1))
do
USERLIST=cut -d " " -f 1 $USERFILE | head -n $i | tail -n +$i
#一次擷取一個User
echo $USERLIST | passwd –stdin $USERLIST #將User密碼設定為User帳號
done
此程式只完成一半,我的目的是帳號與密碼不能一樣,所以只要再加入一個帳號的密碼檔取代echo $USERLIST就可以哩,為什麼我要取帳號呢,因為不可能帳號都是照順序,如果照順序更好做,例如test1,test2,test3…
基本上這樣的機會應該用在學校比較多,但在公司通常都是amy,john,alice…等,所以取帳號出來比較好!!
除此我還遇到一個問題假設 echo $USERLIST | passwd –stdin $USERLIST 我加上echo $USERLIST | passwd --stdin $USERLIST,就會出現:
Changing password for user test3. passwd: all authentication tokens updated successfully.
chgpwd.sh: line 9: Changing: command not found
但程式依舊順利執行,如果不加,就順利不會出現這樣錯誤,我的判斷是因為程式把 Changing password for user test3. passwd: all authentication tokens updated successfully.當成指令,所以當然command not found,不過我還是不知道怎麼解釋
加不加的差別,但是有人說如果加上
表示把執行結果往下帶,不知道這樣說法對不對?!
補充:
由於當初在測試有一些問題上酷學園問了一下,很多前輩回答,也教了一個方法如下:
#!/bin/bash
filename=”user.txt”
cat /dev/null > $filename
for ((i=0;i<100;i++))
do
student_id=$(printf “D98%04d” $i)
student_pass=$(printf “%04x%04x” $RANDOM $RANDOM)
echo “$student_id:$student_pass” >> $filename
done
cat $filename | /usr/sbin/chpasswd
裡面還包含產生亂數密碼,只有最後一行是設定密碼
如果想知道Shell Script執行步驟可以用:
sh -x xxx.sh
參考連結: