要求:创建10个普通用户,并给它们设置随机密码,将密码记录到一个文档里,用户名为user_01 — user_10,密码要求包含大小写字母以及数字,密码长度15位。
题目要求,让我们创建user_01到user_10共10个用户,所以需要使用循环构建01 - 10 的序列 ,方法是 "seq -w 1 10" 这个命令执行后,会打印 ”01 02 ... 09 10" 10个数字出来,这个"-w"选项的意思是等宽,即按序列中最大宽度的数字来,本例中10就是2位,所以1个数字时会在前面补上一个0。
seq 构建序列后,需要循环,使用for即可 所以最终写成这样
for i in `seq -w 1 10` do useradd user_$i done
这个seq 用的还是蛮多的,所以请记住以下用法:
1)seq 支持步长, 默认步长为1,步长可以定义成2,比如
seq 1 2 10 1 3 5 7 9
2)也可以倒序
seq 10 -2 1 10 8 6 4 2
创建用户没啥可说的,直接 useradd username 即可,关键是这个随机密码这里,这个并没有标准答案,只要构建出符合要求的字符串就行,我建议的方法是使用mkpasswd命令
默认系统没有,所以你使用它之前需要先判断一下
if ! which mkpasswd &>/dev/null then yum install -y expect fi
这里有个前提,yum是centos/RHEL/Rocky系统用的,那如果是Debian/ubuntu呢,那就得使用apt安装了,所以,要想脚本完美,还需要判断系统版本。当然我们写脚本的时候就已经知道系统是啥系统了,这里就根据系统版本确定命令就行了。
mkpasswd命令 可以生成随机字符串,默认生成 9位的 ,例如
要想使用mkpasswd生成一个15位的密码 还需要加个参数 -l (length) ,长度的意思
mkpasswd -l 15
另外 mkpasswd也可以指定生成指定字符的个数,比如 -s 2,s(special),表示特殊符号有2个。啥是特殊符号呢?比如 "* ( ) [ ] & ^ @ # ! : ? /"等。mkpasswd -s 0 意思是特殊符号为0。另外还有几个选项:
-d 指定数字
-C 指定大写字母
-c 指定小写字母
生成密码后,需要给它赋值到变量里,比如 p=`mkpasswd -l 15 -s 0`。然后就是给用户设置密码了,设置密码使用passwd命令,正常设置密码 这样做 :
但这样写到脚本里 就会有问题啦,因为需要交互,脚本里肯定不合适。所以还有另外一种方法 :
这样一条命令就可以啦,写到脚本里,完美!
再往后就是将密码保存到一个文件里,题目里我虽然没有要求大家把用户名也保存,但是大家想想,如果咱们的用户名不规则,那你能知道哪个密码是哪个用户么。所以最好是将用户名 密码写到一起。
大家都知道使用 >>追加重定向,但是否忘记了,如果这个文本里就有内容呢 ?所以,最好是先将文本做一个清空的操作:
if [ -f /tmp/user_pass.txt ] then rm -f /tmp/user_pass.txt echo "user_$i $p" >> /tmp/user_pass.txt fi
当然这段代码要放到循环的外面去,也就是要放到脚本一开始的时候。如果在循环里面,那么脚本执行完,这个文本里就只会记录一行,大概就是这么多内容 最后再给大家发一下最终的脚本:
#!/bin/bash if [ -f /tmp/user_pass.txt ] then rm -f /tmp/user_pass.txt fi if ! which mkpasswd then yum install -y expect fi for i in `seq -w 1 10` do p=`mkpasswd -l 15 ` useradd user_$i && echo "$p"| passwd --stdin user_$i echo "user_$i $p" >> /tmp/user_pass.txt done
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !