轉載來源 :shell經典面試題根據文件創建用戶名及密碼 : https://www.jianshu.com/p/eeb455eef7ca
01 前言
shell腳本已經學習了很長一段時間了,現在時不時來看一些經典的面試題,複習一些常用知識點,溫故知新,爲明天做準備~
02 根據文件內容創建用戶名及密碼
背景:寫一個腳本,滿足一下需求及應用,如一個文件的內容如下,根據文件內容實現批量創建用戶,第一列爲用戶名,第二列爲密碼
測試文件test.list
這個題目相信大家都很熟悉了,面試甚至是實際工作應用當中都會經常用到
今天我們來看看實現思路。
第一步:按行讀取文件,推薦用while read line 的模式
先寫腳本框架
while read line 按行讀取文件
第二部:將用戶名和密碼分別取出來,並賦值給變量
這裏用awk實現
取出用戶名、密碼列並賦值
第三步:創建用戶用useradd,同步創建密碼可以用非交互式實現,即
創建用戶名及密碼
第四步:考慮幾種特殊情況
萬一要創建的用戶本來就存在呢?所以應加個判斷,用戶存在不做操作,用戶不存在再執行
考慮用戶已存在的情況
還有,創建用戶操作只有root賬戶有權限,所以一開始就應該判斷當前用戶是不是root
判斷用戶是不是root
腳本就寫好啦,執行一下看看效果:
測試效果
可以看到,用戶和密碼都已成功創建,但是id判斷用戶時有不想看到的輸出,再改一下,完整的腳本如下:
#!/bin/bash
while read i
do
user=`echo $i | awk '{print $1}'`
pass=`echo $i | awk '{print $2}'`
id $user || useradd $user
echo $pass | passwd $user --stdin
done < test.list
完整腳本
再次執行,就不會有用戶不存在這條無須存在的輸出了
03 總結
這是一個工作和麪試都非常經典的案例,知識點總結如下:
3.1 判斷用戶是否爲root,echo $UID ,root賬戶爲0,其餘非0
3.2 按行讀取文件,while read line 模式
3.2 判斷用戶是否存在,id user
3.4 非交互式創建用戶名及密碼 echo ****** | passwd user --stdin