shell指令碼(批量建立使用者) 走了多遠,又是多遠

2022-09-23 06:48:09 字數 3306 閱讀 2926

????????????????????????????????????????? ? ?shell指令碼批量建立使用者

????????????有些面試題中會問到批量建立使用者的題目,大體是用迴圈去進行建立,但有時也會有一些額外的附加條件,一起來看看今天的知識點吧。

需求:1、自定義使用者,不要有特殊字元:user01,user02

2、最多建立100個使用者,要求數字等位對齊。例:1-99 ?01,02,03....99

3、輸入使用者名稱和使用者數目時最多給予三次機會

4、建立隨機的8位密碼,大寫兩個數字三個沒有特殊字元,並將使用者名稱密碼對應放到user_pass.txt中

分析:1、建立自定義使用者使用read -p 鍵盤輸入即可,使用者數目也一樣

2、數字等位對齊seq -w number 可以實現

3、給予三次輸入機會,在匹配不成功後做運算判斷即可

4、建立隨機的密碼需要先安裝expect工具,用法:mkpasswd -l 指定長度 -d 指定幾個數字 -s 指定幾個特殊字元 -c 指定幾個大寫字母

5、建立完成後將使用者名稱和密碼匯入到user_pass.txt即可

指令碼如下:

#!/bin/bash

##########

#user_add

#dingxiang

############

#建立使用者三次機會

for?i?in?`seq?3`

doread?-p?"please?enter?creat?user?name:?"??name

#如果name匹配a-z0-9則跳出迴圈繼續執行

????????if?[[?$name?=~?[a-z0-9]?]];then

????????????????break

????????else

#一共三次機會,3-$i,迴圈到第三次,運算結果為0則退出程式

????????????????name_chance=`echo?$[3-i]`

????????????????if?[?"$name_chance"?==?"0"?];then

????????????????????????echo?"number?exhausted,please?try?again?later"

????????????????????????exit

????????????????else

????????????????????????echo?"please?enter?realy?user?name,there's?still?$name_chance?chance?left"

????????????????fi

????????fi

done

#輸入使用者數量三次判斷

for?j?in?`seq?3`

doread?-p?"please?enter?creat?user?number(1-100):?"?num

????????if?[[?$num?=~?^[1-9]$?||??$num?=~?^[1-9][0-9]$??||?$num?=~?^[1][0][0]$?]];then

????????????????????????break

????????????????else

#一共三次機會,3-$i,迴圈到第三次,運算結果為0則退出程式

????????????????num_chance=`echo?$[3-j]`

????????????????if?[?"$num_chance"?==?"0"?];then

????????????????????????echo?"number?exhausted,please?try?again?later"

????????????????????????exit

????????????????else

????????????????????????echo?"please?enter?realy?user?number(1-100),there's?still?$num_chance?chance?left"

????????????????fi

????????fi

done

#列印使用者名稱和建立數量,給予最後確認。

printf?"

????????user-name:?$name

????????user-number:?$num

"#如果$cho為y則建立使用者,否則退出程式

read?-p?"are?you?sure?to?create?user?(y/n):?"?cho

????????if?[?"$cho"?==?"y"?];then

????????????????for?u?in?`seq?-w?$num`

????????????????do

#將要建立的使用者名稱寫成變數

????????????????user=$$

#隨機密碼定義成變數

????????????????pass=`mkpasswd?-l?8?-d?3?-s?0?-c?2`

#檢查使用者是否存在,使用者存在,返回碼$?為0時,跳出本次迴圈。

??????????????????id?$user?&>/dev/null

????????????????????????if?[?$??-eq?0?];then

????????????????????????????????echo?"user?$user?already?exists"

????????????????????????????????continue

????????????????????????else

#使用者不存在的則建立使用者,並且將使用者名稱密碼匯入到user_pass.txt中

????????????????????????????????useradd?$user

????????????????????????????????echo?$pass?|?passwd?--stdin?$user?&>/dev/null

????????????????????????????????echo?"$___$"?>>?user_pass.txt

????????????????????????????????echo?"$user?is?creat?ok......."

????????????????????????fi?

???????????????done

#不需要建立使用者,退出程式

????????else

????????????????echo?"normal?exit~"

????????????????exit

????????fi

Shell指令碼 批量建立使用者

格式為 使用者名稱 空格 tab 密碼 就是將資料分為兩列 users.txt文字內容示例 新建文字命令 touch create users.sh 編譯文字命令 vim create users.sh bin bash 批量建立使用者 while read line do 讀取line列表中的資料...

shell指令碼批量建立使用者

bin bash date date f t user file user.txt echo color 如果使用者檔案存在並大小大於0就備份 if s user file then mv user file bak echo color green user file exist,rename b...

使用shell指令碼批量建立使用者

1 使用for語句批量新增與刪除特定使用者 for語句的操作物件為使用者指定名稱的變數,並通過in關鍵字為該變數預先設定了乙個取值列表,多個取值之間以空格進行分隔。為於do done之間的命令序列稱為迴圈體。新增使用者 root localhost vim list.txt 準備乙個使用者名稱列表檔...