Linux笔记:Shell脚本,利用who命令和/etc/passwd用户文件夹,查看用户登录情况(ubuntu环境下)
2019-06-05 15:47
330 查看
简介:大学时,老师在一台linux服务器上为我们班每个人创建了一个普通用户,每个用户文件夹路径为/home/班级名/用户名+学号,然后要求做一个显示未登录学生名单的shell脚本,方便考勤,以下是一些思考。
我们知道Linux用户名相关信息保存在文件夹/etc/passwd(密码加密),组名相关信息保存在文件夹/etc/group,而密码则保存在/etc/shadow(需管理员权限查看)。接着上完整shell脚本代码。
#!/bin/bash File1="login_student.txt" File2="all_student.txt" #将/etc/passwd里的总学生名单保存到"all_student.txt"。格式为:学号:姓名 `cat /etc/passwd|cut -d ":" -f 1,5|tail -n 53 > $File2` #将登陆人数重定向到"login_student.txt"。格式为:学号,(ip地址) `who|tr -s " "|tr " " ","|cut -d "," -f 1,5 > $File1` #统计"all_student.txt"的总人员数。为下面的循环语句确定循环次数 all_lines=`wc -l $File2|cut -d " " -f 1` login_lines=`wc -l $File1|cut -d " " -f 1` human_num=0 for((Num=1;Num<=$all_lines;Num=$Num+1)) do flag="False" line=`sed -n ${Num},${Num}'p' $File2|cut -d ":" -f 1` for((inNum=1;inNum<=$login_lines;inNum=$inNum+1)) do inline=`sed -n ${inNum},${inNum}'p' $File1|cut -d "," -f 1` if [ $line = $inline ] then flag="True" fi done if [ $flag = "False" ] then name=`cat $File2|grep $line|cut -d ":" -f 2` ip=`cat $File1|grep $inline|cut -d "," -f 2` echo "当前未登录用户及ip地址:"${name}${ip} human_num=$((human_num+1)) fi done echo "总共学生人数为(1-52号加一个53号测试用户)53人,有"${human_num}"个用户未登录Linux服务器!"
代码解惑:
- 首先第3,4行反引号的作用是:把一个命令(或组合命令)括起来,把该命令的屏幕输出结果截获并当作一个字符串来使用,可以赋值给变量保存,此处只是在脚本中单纯执行管道+重定向命令输出需要的信息到两个文件(login_student.txt,all_student.txt)中。将登陆者信息(who命令)和/etc/passwd最后53行新添加的学生用户(tail命令)重定向到两个文本文件中保存好。
- 接着all_lines和login_lines确定login_student.txt和all_student.txt文件的行数,即统计总学生用户人数和当前登录学生用户人数,便于分别确定下面双层循环的循环次数
- 外层for循环的line(sed命令)变量从第一行到最后一行逐个取出all_student.txt的学生名单,内层for循环的inline(sed命令)变量从第一行到最后一行逐个取出login_student.txt的学生名单
- 如果line变量在内层循环完整循环完一次后,与其相等的字符串inline,表示,匹配到登录学生,修改标志位flag为True。
- 内层循环做完一次完整循环后,再用if语句判断标志位如果为False表示没有匹配到登录名单,打印输出(echo命令) 未登录学生名单
- human_num将未登录学生名单计数,内外层循环结束后做一个汇总输出。
输出结果不显示了,涉及隐私。
相关文章推荐
- 利用Shell脚本来监控Linux系统的负载、CPU、内存、硬盘、用户登录数
- Linux笔记(9)——挂载命令和用户登录查看命令
- Linux(7) 常用命令扩展 改变用户环境变量 (可以实现登陆就执行shell脚本)
- [linux学习笔记]第2天:时间管理,命令帮助信息,文本查看,权限及用户管理,BASH和变量,脚本
- 【一天一个shell命令】好管家-查看当前登录用户-who
- linux查看用户登录信息2-who命令
- 利用shell脚本添加新用户,并且把用户的电话号码保存到/etc/passwd的备注信息栏
- 【Linux学习笔记】16:用户登录查看命令
- 利用Shell脚本来监控Linux系统的负载、CPU、内存、硬盘、用户登录数
- linux达人养成计划学习笔记(七)—— 用户登录查看命令
- Linux命令之who - 查看当前登录用户
- 笔记:Linux常用命令(五)关机重启用户登录查看命令
- Linux系统命令及Shell脚本学习笔记二:用户管理
- 如何恢复linux的环境变量ubuntu中root用户没有办法使用命令
- Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令
- Linux笔记(30)——查看网络环境命令
- 利用shell脚本来监控linux系统的负载与CPU占用情况 推荐
- Linux系统下查看文件调用情况Shell命令
- linux查看当前用户id、whoami用户列表、用户组、用户权限/etc/passwd、/etc/group、/etc/shadow以及切换用户身份、su、sudo、/etc/sudoers
- 利用shell脚本“综合、集中”查看linux server常用软硬件信息