快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

利用非交付式方式运行交互式程序

    为了提高软件运行的灵活性,应用程序往往需要提供一些跟用户交流的窗口。其实在Unix操作系统中,许多命令本身就带有交互式程序的功能。如在删除一个文件夹时,如果这个文件夹中存有文件或者子文件夹,则系统就会提示用户是否需要删除这个文件或者子文件夹。这可以防止用户因为意外而删除有用的文件。不过有时候这也会造成一定的麻烦。如这个文件夹中可能有100个文件一家300个文件夹,此时如果每次删除一个文件就需要按以下y表示可以删除这个文件,那么就需要按400个y 。则这个交互式程序的设计显然会很麻烦。为此在某些特定的情况下,系统工程师可能希望利用非交互式的方式来运行一个交互式程序。

  一、在交互式程序中使用<<符号。

  查找命令可能是Unix系统中使用的最多的一个命令。如系统工程师可能需要在一个脚本程序中查找是否含有某个关键字等等。以前要实现这个任务,系统工程师不得不依次打开多个目标文件,然后输入需要查找的字符串进行查找。当目标文件数量比较少的时候,这个方法还可以。但是如果当目标文件比较多的时候,这个工作两就有点多了。

  查找命令为了提高用户的交互性,往往需要用户在查询数据的时候输入需要查找的字符串已经文件名字等参数。但是在实际工作中系统工程师可能会需要一个查找命名要执行多次,而每次其要查找的内容都是相同的(如上面笔者所描述的一个需求)。此时如果系统工程师在旁边等着命令执行结束然后再输入相关的参数,这显然是比较浪费时间的做法。遇到这种情况时,系统工程师需要把这个交互式的程序或者命令利用非交互式的方式运行。显然Unix系统开发者也考虑到了这个内容。故他们开发出了一个<<符号文件可以帮助实现类似的功能。

  如上图中,lookforinfo.sh是笔者编写的在一个大文件中查找某个关键字的一个脚本程序。由于这个程序比较复杂笔者这里也就不列出来了。以后有机会笔者会像大家解释这个脚本程序。在这个程序运行的时候,需要连个参数,一是需要查找的字符串,二是需要查找的文件。不过笔者在运行这个程序的时候,则加入了<<符号,并且在后面加入了笔者需要查找的关键里以及需要查找的目标文件名。此时笔者运行这个程序的时候,就不需要输入这个两个参数了。笔者现在是每天利用cron命令让其执行一次,看看有没有在这个程序文件中出现start关键字。如果出现的话,则马上通过邮件方式告知笔者。这个run.sh是某个程序启动时的日志文件。当启动出现警告或者错误信息的时候,就会有一个error开头的记录。为此,通过这个每次一次的查询文件(时间设置在这个程序启动后10分钟),笔者在不查看这个日志文件的情况下,就可以知道其启动过程中是否有错误信息。要实现这个功能,<<文件在这里起着至关重要的作用。

  那么这里的<<文件到底有什么作用呢?<<符号其实表示一个文件,系统工程师往往把它称之为here文件。Shell会使用<<这个符号表示从脚本所在的同一个文件中读取数据。如上图所示,就表示从脚本的同一个文件中读取相关参数,而不是从其他文件(如键盘)中读取数据。通常情况下,任何使用标准数据的命令都可以从here文档中读取相关的参数数据。如上图所示,本来执行lookforinfo.sh程序,需要从键盘中接收查询字符串以及目标文件名两个参数。而此时笔者利用了<<文件,则系统看到了这个关键字之后,就不会再等待笔者键盘上的输入,而直接从here文件中去读取相关的运行参数。为此,当系统每次周期性的运行这个脚本程序时,系统就会自动获取相关的参数,而不用笔者重复的输入。可见,利用here这个文件符号可以让一些交互式的命令采用预先定义好的参数以非交互式的方式来执行。这个特性很有用。如上面笔者就是利用这个功能让系统定期的查询应用程序启动日志,看看是否有错误信息。让系统来帮助系统工程师自动监测应用程序的启动情况,从而降低系统工程师的工作量。

  另外可能各位系统工程师也喜欢在应用程序中使用read语句。不过read语句需要有一组事先确定好的参数来响应。此时如果系统工程师能够把这些参数预先防止在here文档中,则也可以让交互式命令read以非交互式的方式运行。通过这种处理技巧,可以减少系统等待用户输入的时间,提高程序的执行效率。因为电脑比人脑的反应速度要快的多。如果事先能够给交互式命令或者程序提供相关的参数,其可能执行起来只需要10秒即可。但是在执行的过程中再输入相关的参数的话,包括用户的反映时间、输入时间等等,则这个命令可能需要60秒才可以完成。为此系统工程师通过编写一些简单的脚本程序,可以让一些交互式的命令在非交互式环境中运行,从而提高应用程序的执行效率。

 [2] [3] 下一页

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论