linux shell编程

来源:百度知道 编辑:UC知道 时间:2024/05/16 09:33:01
说明:这是我的试验作业题,由于没有搞过shell编程,一点都不会。周一就要交作业了,希望高手帮我,谢谢。
正则表达式和Shell编程
背景介绍
假定你是一位Linux系统管理员,现在在你供职的公司中管理一台Linux服务器。
作为一个系统管理员,每天最重要的任务之一就是管理系统的日志文件。假定现在你的手头有一个日志文件,它负责记录所有的登录请求。这个文件的格式如下:
日志文件名为:login.log
该日志文件中的信息都以行为单位;
所有日志文件中每一行记录都遵循如下格式:
用户帐号::登录日期和时刻::login (success|fail)
程序保证所有用户帐号都服从如下规则:
a、用户名只由数字、下划线和英文字母组成;
b、用户名必须以英文字母或下划线开始;
所有程序在写入新的日志信息时都是简单地将信息添加到文件末尾。所以该日志文件中的信息都是从旧排到新的。
一个用于调试的login.log实例位于oslesson/program目录下。
接下来我们的所有实验题,都围绕着如何处理这个文件中的信息进行。
题目一 利用正则表达式查找信息
系统管理员往往需要定期统计各个用户的登录情况,并做出报告。但是,一个系统的登录信息每天都会增加,这个日志通常都是非常巨大的。而且由于任何用户的登录都会记录在这个文件中,日志之中同一个用户登录的信息不可能都是连续的。如果管理员每次统计信息时总是一条一条记录地检查,那几乎不可能按时完成统计任务。如果我们有这样一种工具,只要指定我们要查找的用户帐号,它就能自动搜索满足需要那些信息并将其显示出来,无疑会大大减轻管理员的负担。
请利用正则表达式的有关知识,将给定文件中的所有root用户和John登录登录失败的信息记录全部找出来,并打印在屏幕上,请给出你使用的命令:
_______________________________________________________________
提示:本程序至少可以使用grep、sed或awk三者之一完成,如果某些同学熟悉Perl或Pyth

以下只在UNIX5环境下通过,因没有linux环境故未试验:

第一问如果两个用户分别进行就很简单了:

grep root login.log | grep fail

如果两个用户同时查询grep就不行了,需要用egrep:

egrep 'root|John' login.log | grep fail

第二问:

sss=`egrep 'root|John' login.log | grep -c fail` | echo "Result:There are $aaa items."

当然除了这些还有很多方法,给你提供一个地址,上面有很多高人和高水平的帖子:
http://bbs.chinaunix.net/forumdisplay.php?fid=24