代碼如下:
1 #!/bin/bash
2 # History:
3 #2016/05/05 dairen first release
4 #2016/05/06 dairen second release
5 #export LANG=zh_TW.big5
6 export PATH=/sbin:/usr/sbin:/bin:/usr/bin
7 accountfile="user.passwd"
8 # 1. 進行賬號相關的輸入先!
9 read -p "賬號開頭代碼 ( Input title name, ex> std )======> " username_start
10 read -p "賬號層級或年級 ( Input degree, ex> 1 or enter )=> " username_degree
11 read -p "號碼部分的數字位數 ( Input \# of digital )======> " nu_nu
12 read -p "起始號碼 ( Input start number, ex> 520 )========> " nu_start
13 read -p "賬號數量 ( Input amount of users, ex> 100 )=====> " nu_amount
14 read -p "口令標准 1) 與賬號相同 2)隨機數自定義 ==============> " pwm
15 if [ "$username_start" == "" ]; then
16 echo "沒有輸入開頭的代碼" ; exit 1
17 fi
18 # 判斷數字系統
19 testing0=$(echo $nu_nu | grep '[^0-9]' )
20 testing1=$(echo $nu_amount | grep '[^0-9]' )
21 testing2=$(echo $nu_start | grep '[^0-9]' )
22 if [ "$testing0" != "" -o "$testing1" != "" -o "$testing2" != "" ]; then
23 echo "輸入的號碼不對啦!有非為數字的內容!" ; exit 1
24 fi
25 if [ "$pwm" != "1" ]; then
26 pwm="2"
27 fi
28
29 # 2. 開始輸出賬號與口令文件!
30 [ -f "$accountfile" ] && mv $accountfile "$accountfile"$(date +%Y%m%d)#文件若已存在就重命名
31 nu_end=$(($nu_start+$nu_amount-1))
32 for (( i=$nu_start; i<=$nu_end; i++ ))
33 do
34 nu_len=${#i}#取得字符串長度<pre name="code" class="html"> 35 if [ $nu_nu -lt $nu_len ]; then
36 echo "數值的位數($i->$nu_len)已經比你配置的位數($nu_nu)還大!"
37 echo "程序無法繼續"
38 exit 1
39 fi
40 nu_diff=$(( $nu_nu - $nu_len ))
41 if [ "$nu_diff" != "0" ]; then
42 nu_nn=0000000000
43 nu_nn=${nu_nn:1:$nu_diff}#對nu_nn從1位開始截取nu_diff位
44 fi
45 account=${username_start}${username_degree}${nu_nn}${i}
46 if [ "$pwm" == "1" ]; then
47 password="$account"
48 else
49 password=$(openssl rand -base64 6)#用openssl庫產生偽隨機數
50 fi
51 echo "$account":"$password" | tee -a "$accountfile"#輸出到文件
52 done
53
54 # 3. 開始創建賬號與口令!
55 cat "$accountfile" | cut -d':' -f1 | xargs -n 1 useradd -m #add account
56 chpasswd < "$accountfile" #add password
57 pwconv #將密碼從/etc/passwd到/etc/shadow
58 echo "OK!創建完成!"