当前位置:  技术问答>linux和unix

shell编程?帮忙啊

    来源: 互联网  发布时间:2016-03-02

    本文导语:  说明:这是我的试验作业题,由于没有搞过shell编程,一点都不会。周一就要交作业了,希望高手帮我,谢谢。 正则表达式和Shell编程 背景介绍   假定你是一位Linux系统管理员,现在在你供职的公司中管理一台Linux...

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

  提示:Shell中可以用一对反引号“`”括起一条命令,表示把这命令的整个输出结果当成一个字符串使用。
  Linux命令中,wc命令可以用来统计给定的文件的行数、单词数和ASCII字符数,同时,wc命令也是一个过滤器,它服从过滤器的所有设计要求。
  Linux命令中,echo命令可以向屏幕打印信息。
题目三 一个简单但实用的Shell脚本
  显然,以上两道题中我们写出的命令比前面写的那些要复杂得多,如果每一次查询都要这么写一遍的话太麻烦了。所以我们可以把它写在一个脚本文件里,需要的时候调用那个文件就可以了。
  请编写一个脚本文件,它应该先显示出题目一的结果,接下来显示题目二的结果。为统一起见,我们要求这个脚本文件的名字叫做query。注意,Linux环境下的Shell不是唯一的,为了保证这个脚本文件的通用性,我们不应该要求管理员记住这个脚本是用什么语言写的。也就是说,这个文件必须能够在任何Shell环境下直接用命令行“./query”执行,而不允许使用诸如“sh query”的方式执行。
  同时,请给出要想使这个脚本文件满足题目中关于文件可执行的要求需要对这个文件做的处理步骤,以及进行这些处理使用的命令(不多于两条)。
________________________________________________________________
题目四 扩展这个脚本
  现在我们可以使用的脚本来轻松地统计我们想得到的数据了。但这个脚本还不够好,因为它太死板了,只能统计名字叫John和root的用户的登录信息,而且对输入文件的文件名的格式也有要求。如果这个脚本能够像那些Linux标准命令那样,通过各种命令行参数来指定行为的话,无疑能够大大提升这个脚本的通用性。
  请利用Shell脚本的命令行功能改进题目三的脚本。该脚本我们命名为
query2,以与query向区别。这个脚本接受的命令行如下:
  query2   
  其中,三个参数都是是必须出现的。如果命令行格式不满足要求,则程序应给出错误提示并退出。其中第三个参数的取值只能时success、fail或all三者之一,success表示给出用户成功登录的次数统计;fail表示给出用户登录失败的次数统计;all表示给出该用户所有的登录次数统计,包括成功和失败的。该脚本输出的格式和执行时的要求应与第三题相同。
  提示:显然,要解决这一题就必须先掌握Shell命令行参数的引用方式和Shell的if语句。请自行查阅Shell程序设计的有关资料。
题目五 统计用户人数
  仅仅是统计登录信息还是不够,如果管理员不知道日志中有哪些用户登记在案,那么按照我们上述的命令格式,这个程序就没有用武之地了。所以,我们还需要一个程序来统计一个日志文件中究竟有几个用户。
  我们将这个程序命名为getusers,其接受的命令行格式如下:
  getusers 
  其中,日志文件名是必须提供的。这个程序扫描给定的输入日志文件,并统计所有的用户名,最后在屏幕上按照一行一个的格式打印出所有的用户名。例如,某个输入日志文件中一共有user1、user2、user3三个用户的登录信息,则输出应该为:
  user1
  user2
  user3
  该程序的可执行特性与题目3要求相同。
  提示:这个程序可以用Shell,也可以用awk脚本写,显然,这个程序不能简单地用一个查找语句解决,所以功能更强的awk可能更适合在这种场合使用。如果同学们不熟悉如何在awk中访问命令行参数,也可以使用在Shell脚本中调用awk的方法,用我们在前面学到的Shell处理命令行的方法处理命令行参数,用awk处理程序逻辑。

|
1)
cat oslesson/program/login.log | grep "John|root" | grep fail

2)
echo Result: There are `cat oslesson/program/login.log | grep "John|root" | grep fail | wc -l ` items

3)
query
[code=BatchFile]cat oslesson/program/login.log | grep "John|root" | grep fail
echo Result: There are `cat oslesson/program/login.log | grep "John|root" | grep fail | wc -l ` items[/code]
chmod 777 query
Add "!/bin/bash" to the head of the script

4)
query2
[code=BatchFile]
if $#

    
 
 

您可能感兴趣的文章:

  • 求教求教,shell问题...各位大哥,帮忙下
  • 那里有《shell编程》和关于curses编程的教程可以下载,请帮忙?
  • 20090102用shell代码转换为2009-01-02?帮忙了,谢谢
  • 帮忙写个shell???
  • 请高手帮忙想个shell脚本
  • 高手帮帮忙,SHELL脚本编程~~~~~~~~~~~~~~~~~~
  • 帮忙写个简单的shell
  • shell大侠帮帮忙啊~
  • 一个linux shell编程求素数问题 高手帮帮忙啊
  • 我要写定时启动一个命令的shell,请大家帮忙.
  • LINUX 和UNIX shell 编成指南(谁有啊?帮忙给我发一份啊)
  • 一个shell的小问题,大家帮忙看看啊!
  • 很简单的shell程序,大家帮忙啊(在线等,急!!)
  • shell问题,请大家帮忙。。
  • shell问题请大家帮忙
  • shell脚本 替换功能的问题,请帮忙
  • 求大家帮忙实现这个 shell
  • 一个shell的问题,请各位高手进来帮忙了,急,谢谢
  • 请大牛帮忙,shell脚本的问题
  • 还是shell-----------高手帮忙。。。。。。。。
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • 请问什么是shell编程?一般都用shell编程实现什么?
  • 请教一个shell编程的问题,就是如何在shell编程中读一个文件的内容?谢谢啦!
  • Linux下的编程指的就是Shell编程吗?
  • HTML标签参考手册 iis7站长之家
  • Linux C编程一站式学习,高级shell Bash脚本编程指南,
  • shell 编程 执行shell新建多个终端 并执行程序
  • Linux命令、编辑器与Shell编程 和 UNIX SHELL范例精解(第4版) 区别大么?
  • Shell编程的,可以在shell中访问多行的属性吗?如:
  • 刚学Shell编程,问个关于Shell中if语句的问题
  • 如何学UNIX的SHELL编程
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 不同类型的shell*(K SHELL , C SHELL) 用命令怎么切换?
  • linux bash shell命令:grep文本搜索工具简介
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 菜鸟问问题:shell是什么呢?普通的ls、cp、pwd这些命令算不算shell呢?如何把自己写的文件变成shell呢?
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • shell变量和子shell的问题请教
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • 请问“当前shell”和“子shell”的区别?
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • 怎么知道当前是B_SHELL 还是C_SHELL
  • 用户登陆后运行某SHELL退出SHELL就回到LOGIN是怎么作到的?
  • 怎么写shell代码 写好shell怎么运行?
  • 请问一个shell中如何获取这个shell自身抛出的错误?
  • 非登录shell是什么 意思,和登录shell有什么区别啊
  • Solaris 8中修改root的shell为一个非法的Shell后怎么办?
  • 各位Shell高人,如何取得Shell的第10个入口参数?$10不行啊,急!
  • 如何在一台机器上的shell中执行另外一台机器上的shell
  • 在shell中的交互问题,现在需要在shell结束时按某键或任意键
  • 请教 一个shell问题 如何通过shell获得一个日志文件中的增量部分


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3