一、假如添加用户的信息如下:
二、shell脚本如下:
① #!/bin/bash 大家看过韩顺平老师的视频,应该知道linux中有4种shell ,这句指定我们使用bash
② #usage:sh adduser.sh userinfo.txt 表示注释,告诉大家使用方法为:sh 脚本 保存账号密码的文件
③ sh adduser.sh userinfo.txt sh adduser.sh 为$0, userinfo.txt为$1
所以,wc $1 就是wc userinfo.txt ,执行结果如下:
对我们来说,统计行数是需要的,也就是上图中的“4”(注意,4前面有空格的,这为啥wc $1 | cut –f1 -d' '的原因,大家可以单独试试这语句)
wc -l userinfo.txt执行结果如下:
Cut –f 表示 裁剪某一域
-d 表示 自定义如何分域 ,-d’ ‘ 表示以空格分隔为域(单引号之间有空格的)
所以wc $1 | cut -f2 -d' ' 表示截取第一部分 ,等价于wc -l $1 | cut –f1-d' '
然后,我们将统计好的行数赋给变量num
① n=1 又定义一个变量,并赋予初值
② While [ $n –le $num] 如果n的值小于等于num(litter equal),执行下面循环
③ Sed –p 打印某行 ,例如,sed -p 3p /root/userinfo.txt 表示打印userinfo.txt的第三行,我们想要依次打印每行,就用”$n”p 参数
awk 表示检测文件的内容,然后输出你想要的区域
awk 后面不加参数,表示以空格分隔
-F: 表示以冒号分隔
Awk -F:‘$3==0 {print $1 }’/etc/passwd 表示检测系统中UID为0 的用户
/etc/passwd 文件如下:
$1 为第一区域,第一个冒号前面的用户名,$3为第三区域,第二个冒号后面的UID号(注意这边$跟参数或叫位置变量$是不同概念)
/etc/passwd 格式为(用户名:密码位:UID:GID:宿主目录:哪种shell)
这句语句中,第一个$1,表示userinfo.txt 文件,管道后面awk的操作对象变成了
没出参数,表示以空格分隔。所以,第二个$1 为zhangsan print $打印出来为zhangsan,变量username为zhangsan
① Useradd $username 表示添加用户
② userpasswd=`sed -n"$n"p $1 | awk '{ print $2 }'` 表示先打印出某行,提取这行的空格后面的密码
③ echo"$userpasswd" | passwd --stdin$username
我们在添加用户后,用passwd 设置 密码 是交互式的,--stdin 就是屏蔽交互式的方式。
这句echo 显示变量userpasswd 的值(就是我们想要的密码),然后,赋给用户。(显示的userpasswd 相当于我们交互式时输入的密码)
10. n=`expr $n + 1`相当于C语言中n=n+1 在linux中,命令expr 表示算术运算
总结:cut 和awk 功能相似,所以,上面有些地方可以改动的。如有错误,欢迎指正!