1. 程式人生 > >shell練習(12)——批量生成用戶,並設置密碼

shell練習(12)——批量生成用戶,並設置密碼

通過 生成 連續 -- bash 執行 一個 習題 系統

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

shell練習(12)——批量生成用戶,並設置密碼