shell经典面试题根据文件创建用户名及密码(亲测)

转载来源 :shell经典面试题根据文件创建用户名及密码 : https://www.jianshu.com/p/eeb455eef7ca

01 前言

shell脚本已经学习了很长一段时间了,现在时不时来看一些经典的面试题,复习一些常用知识点,温故知新,为明天做准备~

02 根据文件内容创建用户名及密码

背景:写一个脚本,满足一下需求及应用,如一个文件的内容如下,根据文件内容实现批量创建用户,第一列为用户名,第二列为密码
在这里插入图片描述
shell经典面试题根据文件创建用户名及密码(亲测)_第1张图片
测试文件test.list
这个题目相信大家都很熟悉了,面试甚至是实际工作应用当中都会经常用到

今天我们来看看实现思路。

第一步:按行读取文件,推荐用while read line 的模式

先写脚本框架
shell经典面试题根据文件创建用户名及密码(亲测)_第2张图片
while read line 按行读取文件
第二部:将用户名和密码分别取出来,并赋值给变量
这里用awk实现
shell经典面试题根据文件创建用户名及密码(亲测)_第3张图片
取出用户名、密码列并赋值
第三步:创建用户用useradd,同步创建密码可以用非交互式实现,即
shell经典面试题根据文件创建用户名及密码(亲测)_第4张图片
创建用户名及密码
第四步:考虑几种特殊情况

万一要创建的用户本来就存在呢?所以应加个判断,用户存在不做操作,用户不存在再执行
shell经典面试题根据文件创建用户名及密码(亲测)_第5张图片
考虑用户已存在的情况
还有,创建用户操作只有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

shell经典面试题根据文件创建用户名及密码(亲测)_第6张图片
完整脚本
再次执行,就不会有用户不存在这条无须存在的输出了

03 总结

这是一个工作和面试都非常经典的案例,知识点总结如下:

3.1 判断用户是否为root,echo $UID ,root账户为0,其余非0

3.2 按行读取文件,while read line 模式

3.2 判断用户是否存在,id user

3.4 非交互式创建用户名及密码 echo ****** | passwd user --stdin

你可能感兴趣的:(shell)