1. 習題
創建user_00至user_09 共十個新的賬號,並且給他們創建密碼。密碼要求:長度10,包含數字,大小寫字母。創建時,需要將用戶名和對應的密碼保存到一個日誌文件。
2. 分析
首先,對用戶格式,可以用for循環,配合seq命令產生,具體情況如下:
(1) 產生0-3的數字
$ for i in `seq 0 03`;do echo $i; done
0
1
2
3
(2)按照兩個位寬,產生00-03的數字
$ for i in `seq -w 0 03`;do echo $i; done
00
01
02
03
(3) 指定間隔爲2,產生數字
$ for i in `seq 0 2 09`;do echo $i; done
0
2
4
6
8
然後,就是考慮生成密碼的辦法了。隨機密碼用mkpasswd命令生成,這個命令需要安裝expect包。
(1) 沒有特殊符號,長度爲10的隨機密碼:
$ mkpasswd -s 0 -l 10
EW7vp9ombq
(2) 沒有特殊符號,包含5個數字,長度爲14的密碼:
$ mkpasswd -s 0 -d 5 -l 14
mlOd973W3uo7sm
當我們準備好密碼之後,就是更新用戶的密碼了。我們都知道,在linux系統,更新用戶密碼的命令是passwd。但是passwd在執行的時候,需要連續輸入兩次密碼進行確認。這樣,在用腳本批量生成用用戶的時候,就不是那麼方便了。這裏有幾種解決的辦法:
(1)方法一,利用passwd 命令的--stdin參數,完成密碼更新:
echo "EW7vp9ombq" | passwd --stdin user_00
(2)方法二,通過echo輸出兩行內容,作爲passwd的兩次確認輸入,完成更新確認密碼,
echo -e 選項,可以將字符串中的"\n"當做換行符:
echo -e "1234\n1234" | passwd user_01
3. 腳本
#!/bin/bash
for i in `seq -w 0 09`
do
p=`mkpasswd -s 0 -l 10`
useradd user_$i >/dev/null 2>/dev/null
echo "user_$i $p" >> /tmp/useradd.log
echo -e "$p\n$p" | passwd user_$i >/dev/null 2>/dev/null
done