批量添加用户shell脚本详解

来源:互联网 发布:centos7 mysql登陆 编辑:程序博客网 时间:2024/04/29 04:25

一、假如添加用户的信息如下:


二、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 功能相似,所以,上面有些地方可以改动的。如有错误,欢迎指正!

0 0
原创粉丝点击