SHELL編程練習-批量創建刪除用戶和組

1.需求

reed是系統管理員,需要爲一個教室中的服務器添加一個老師和若干學生用戶,手動添加太麻煩了,請你爲他編寫一個bash腳本 userctr.sh 實現批量添加和刪除用戶。老師用戶名,學生用戶名和學生數量使用參數進行控制。

userctr.sh 腳本執行時候包括四個參數:

bash userctr.sh 操作(add或者del)教師名 學生名前綴 學生數量

腳本成功執行後將創建1個教師用戶和若干個學生用戶,滿足下列條件:

1)學生數量參數,參數範圍爲1~10,若超過10或不爲正整數,則報錯打印 parameter error
2)學生名前綴爲字符串,只允許包含小寫字母,否則報錯打印 parameter error,前綴後面跟數字序列
3)每個用戶設置一個隨機6位數密碼,在添加命令執行後並將用戶名和對應的密碼輸出
4)如果某個用戶名已經存在,則默認不需要創建該用戶

執行腳本的範例:

#添加一位叫reeeed教師,3位叫deeeer的學生
[root@reedoracle ~]# ./userctr.sh add reeeed deeeer 3
User [reeeed] create successfully.
reeeed:2bf168
User [deeeer1] create successfully.
deeeer1:39adcd
User [deeeer2] create successfully.
deeeer2:a12201
User [deeeer3] create successfully.
deeeer3:4088d2
#參數不正確時提示
[root@reedoracle ~]# ./userctr.sh add 123 321 11
Parameter error!
#輸入不規範時的提示
[root@reedoracle ~]# ./userctr.sh add 123 321 
--Usage:
        ./userctr.sh [add/del] [Teacher'sName] [Student'sName] [The number of Students]
        ex.
        ./userctr.sh add teacher stu 3
--
        add:useradd username
        del:userdel username
        [Teacher'sName]:teacher's name
        [Student'sName]:student's name,just only the beginning of a lowercase letter 
        [The number of Students],only [1-10]

2.難點和知識點
難點:

1.需要判斷輸入的參數是否正確和規範
2.嵌套多個條件判斷語句
3.隨機生成密碼

知識點:

1.SHELL中的if/for語法
2.SHELL參數使用
3.用戶創建

具體實現:

[root@reedoracle ~]# cat userctr.sh 
#!/bin/bash

#func:add or del user
#author:reed

. /etc/profile

UserCtr=$1
TeacherName=$2
StudentName=$3
StudentNumber=$4

Usage(){
cat<<EOF
--Usage:
        $0 [add/del] [Teacher'sName] [Student'sName] [The number of Students]
        ex.
        $0 add teacher stu 3
--
        add:useradd username
        del:userdel username
        [Teacher'sName]:teacher's name
        [Student'sName]:student's name,just only the beginning of a lowercase letter 
        [The number of Students],only [1-10]
EOF
}

if [ $# -eq 4 ];then
        if [ $1 == "add" ];then
                #echo "add"
                if [[ "$2" =~ ^[a-z]+$  &&  "$3" =~ ^[a-z]+$  && "$4" -ge 1 && "$4" -le 10 ]];then
                        #create user $2
                        id $2 >>/dev/null 2>&1
                        if [ $? -ne 0 ];then
                                useradd $2
                                TeacherPasswd=$(date|md5sum|cut -c 1-6)
                                echo $TeacherPasswd|passwd --stdin $2 >>/dev/null 2>&1
                                echo "User [$2] create successfully."
                                echo "$2:$TeacherPasswd"
                        else
                                echo "The user [$2] is exist."
                        fi
                        for ((num=1;num<=$4;num++));do
                                id ${3}${num} >>/dev/null 2>&1
                                if [ $? -ne 0 ];then
                                        useradd ${3}${num}
                                        StudentPasswd=$(echo $RANDOM|md5sum|cut -c 1-6)
                                        echo $StudentPasswd|passwd --stdin ${3}${num} >>/dev/null 2>&1
                                        echo "User [${3}${num}] create successfully."
                                        echo "${3}${num}:$StudentPasswd"
                                else
                                        echo "The user [${3}${num}] is exist."
                                fi
                        done
                else
                        echo "Parameter error!"
                        exit 10000
                fi
        elif [ $1 == "del" ];then
                echo "Please delete user manually."
        else
                echo "Parameter error!Please input [add] or [del]."
                exit 10086
        fi
else
        Usage
fi

注:“del”用戶刪除的原理與創建用戶一樣,懶的寫了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章