unix的脚本--报告所有的登陆和注销情况详解
Logic
-------------------
get list of users(call it prev)//建立了一个在脚本运行时已登录用户的列表,并按照用户名进行排序
while true
sleep
get list of users(call it curr)
compare lists
in prev,not in curr->logout
int curr,not int prev->login
make prev=curr
repeat
——————————————————————————————————————————————————————————————
shell code
-----------------------
who | sort>prev //who命令输出用户列表,sort命令将列表作为输入读进,然后输出一个排序号的列表
//who | sort:告诉shell同时执行who和sort,将who的输出直接作为sort的输入
//sort>prev:告诉shell将sort的输出送至prev文件中。若此文件不存在,则创建此文件;若此文件存在,则替换其内容。
while true>prev //prev:前一个列表。curr:当前列表
sleep 60; //休眠一分钟
who|sort>curr // 脚本在文件curr中创建一个新的用户列表
echo"logged.out"
comm -13 prev curr //comm:比较两个排序过的列表,并将此三列打印出来,这里的每一列代表一个子集。
//比较两个文件可以得到三个子集:仅文件1有的行,仅文件2有的行,两者共有的行
//可以使用命令行选项来让结果只出现其中的任意一列或者二列。
//比如:comm -23 prev curr#删除第二列和第三列的=>仅显示prev中的内容;前一个列表中有而当前列表没有的登陆记录:注销的用户
//comm -13 prev curr#删除第二列和第三列的=>仅显示curr中的内容;当前列表中有而前一个列表中没有的登陆记录:新登陆用户
mv curr prev //将当前列表文件curr更名为prev并替换原来的prev
done
——————————————————————————————————————————————————————————————————
watch.sh脚本体现了三个重要的思路:
1.shell脚本的功能——与c语言比简单易用
2.软件工具的灵活性——每一个工具完成一项特定的、通用的功能
3.I/O重定向和管道的使用和作用
解释:
工具:指的是能够完成特定通用任务的功能的助手。
例如:man 可以查询关键词的用法;kill可以管理进程;
sort工具的作用是:从一个数据流中读取字节,再将结果输出到另一个流中,同时若有错误发生,则将错误报告给第三个流。
参考网站:http://blog.sina.com.cn/s/blog_54447c9001009j3w.html