LINUX与UNIX SHELL编程指南026.pdf
《LINUX与UNIX SHELL编程指南026.pdf》由会员分享,可在线阅读,更多相关《LINUX与UNIX SHELL编程指南026.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载第26章 shell 工 具本章将讨论以下内容:创建以日期命名的文件及临时文件。信号。t r a p命令以及如何捕获信号。e v a l命令。l o g g e r命令。26.1 创建保存信息的文件任何脚本都应该能够创建临时文件或日志文件。在运行脚本做备份时,最好是保存一个日志文件。这些日志文件通常在文件系统中保留几周,过时将被删除。在开发脚本的时候,可能总要创建一些临时的文件。在正常运行脚本的时候,也要使用临时文件保存信息,以便作为另外一个进程的输入。可以使用 c a t命令来显示一个临时文件的内容或把它打印出来。26.1.1 使用date命令创建日志文件在创建日志文件时,最好能够使它具
2、有唯一性,可以按照日志文件创建的日期和时间来识别这些文件。我们可以使用 d a t e命令做到这一点。这样就能够使日期和时间成为日志文件名中的一部分。为了改变日期和时间的显示格式,可以使用如下的命令:date option+%format使用加号+可以设置当前日期和时间的显示格式。下面的例子将日期以日、月、年的格式显示:下面是一些常用的日期格式:下面的命令可以使时间按照h h:m m的格式显示:下面的命令可以显示完整的时间:注意,如果希望在日期和时间的显示中包含空格,要使用双引号。在文件名中含有日期的一个简单办法就是使用置换。把含有你所需要的日期格式的变量附加在相应的日志文件名后面即可。在下面
3、的例子中我们创建了两个日志文件,一个使用了 d d,m m,y y的日期格式,另一个使用了d d,h h,m m的时间格式。下面就是这个脚本。运行上面的脚本后,得到这样两个日志文件。26.1.2 创建唯一的临时文件在本书的前面讨论特殊变量时,曾介绍变量$,该变量中保存有你所运行的当前进程的进程号。可以使用它在我们运行的脚本中创建一个唯一的临时文件,因为该脚本在运行时的进程号是唯一的。我们只要创建一个文件并在后面附加上$即可。在脚本结束时,只需删除带有$扩展的临时文件即可。S h e l l将会把$解析为当前的进程号,并删除相应的文件,而不会影响以其他进程号做后缀的文件。在命令行中输入如下的命令
4、:这就是当前的进程号,如果你执行这个命令,看到的结果可能会有所不同。现在如果我创建另一个登录进程并输入同样的命令,将会得到一个不同的进程号,因为我已经启动了一个新的进程。下面的例子中,创建了两个临时文件,并进行了相应的操作,最后在结束时删除了这些文件。290第五部分 高级s h e l l编程技巧下载当上面的脚本运行时,将会创建这样两个文件:在执行rm/tmp/*.$时,s h e l l实际上将该命令解析为rm/tmp/*.408。记住,该进程号只在当前进程中唯一。例如,如果我再次运行上面的脚本,将会得到一个新的进程号,因为我已经创建了一个新的进程。如果文件有特殊用途的话,那么创建含有日期的
5、文件,就可以使你很容易地查找到它们。而且还可以很容易地按照日期删除文件,因为这样一眼就能看出哪个文件是最新的,哪个文件是最“旧”的。还可以使用这种方法来快速地创建临时文件,它们在当前进程中是唯一的。在脚本结束之前,也很容易删除这些临时文件。26.2 信号信号就是系统向脚本或命令发出的消息,告知它们某个事件的发生。这些事件通常是内存错误,访问权限问题或某个用户试图停止你的进程。信号实际上是一些数字。下表列出了最常用的信号及它们的含义。信号信号名含义1S I G H U P挂起或父进程被杀死2S I G I N T来自键盘的中断信号,通常是3S I G Q U I T从键盘退出9S I G K I
6、 L L无条件终止11S I G S E G V段(内存)冲突1 5S I G T E R M软件终止(缺省杀进程信号)还有信号0,我们前面在创建.l o g o u t文件时已经遇到过。该信号为“退出 s h e l l”信号。为了发出信号0,只要从命令行键入e x i t,或在一个进程或命令行中使用即可。发送信号可以使用如下的格式:kill-signal no:|signal name process ID使用k i l l命令时不带任何信号或名字意味着使用缺省的信号 1 5。可以使用如下的命令列出所有的信号:第2 6章shell 工具291下载26.2.1 杀死一个进程发送信号1将使一个
7、进程重新读入配置文件。例如,你在运行域名服务(D N S)守护进程n a m e d,现在你对域名数据库文件做了某些修改,这时不需要杀死该守护进程再重新启动,只需使用kill-1命令向其发送信号1。N a m e d进程将重新读入它的配置文件。下面的例子向系统中一个名为 m o n _ w e b的进程发送信号9(无条件终止)来杀死它。首先使用p s命令得到相应的进程号。如果系统不支持ps-ef命令,那么可以使用ps xa。为了杀死该进程,我可以使用下面的两种方法之一:kill-9 157或kill-s SIGKILL 157在有些系统中,不必使用-s,例如:kill SIGKILL 157。
8、下面的脚本将根据进程名来杀死一个进程,拟被杀死的进程名作为该脚本的一个参数。在执行相应的命令之前,将会首先检查是否存在这样的进程。在这里使用g r e p命令来匹配相应的进程名。如果匹配成功,则向用户提示进程已经找到,并询问用户是否杀死该进程。最后使用kill-9命令杀死相应的进程。下面就是该脚本。292第五部分 高级s h e l l编程技巧下载运行该脚本将会产生如下的输出:在使用该脚本时,要确信存在相应的进程:26.2.2 检测信号有些信号可以被应用程序或脚本捕获,并依据该信号采取相应的行动。另外一些信号不能被捕获。例如,如果一个命令收到了信号 9,就无法再捕捉其他信号。在编写s h e
9、l l脚本时,只需关心信号1、2、3和1 5。当脚本捕捉到一个信号后,它可能会采取下面三种操作之一:1)不采取任何行动,由系统来进行处理。2)捕获该信号,但忽略它。第2 6章shell 工具293下载3)捕获该信号,并采取相应的行动。大多数的脚本都使用第一种处理方法,这也是到目前为止本书中所有脚本所采取的处理方法。如果想要采取另外两种处理方法,必须使用 t r a p命令。26.3 trapt r a p可以使你在脚本中捕捉信号。该命令的一般形式为:trap name signal(s)其中,n a m e是捕捉到信号以后所采取的一系列操作。实际生活中,n a m e一般是一个专门用来处理所捕
10、捉信号的函数。N a m e需要用双引号(“”)引起来。S i g n a l就是待捕捉的信号。脚本在捕捉到一个信号以后,通常会采取某些行动。最常见的行动包括:1)清除临时文件。2)忽略该信号。3)询问用户是否终止该脚本的运行。下表列出了一些最常见的t r a p命令用法:trap 2 3忽略信号2和信号3,用户不能终止该脚本trapcommands 2 3如果捕捉到信号2或3,就执行相应的c o m m a n d s命令trap 2 3复位信号2和3,用户可以终止该脚本也可以使用单引号()来代替双引号(“”);其结果是一样的。26.3.1 捕获信号并采取相应的行动下面的例子一经运行就开始计
11、数直至用户按(信号2)。这时该脚本将会显示出当前的循环数字,然后退出。在本例中t r a p命令的格式为:trap do_something signal no:(s)下面就是该脚本:现在让我们来仔细分析一下该脚本。294第五部分 高级s h e l l编程技巧下载trap my_exit 2在本例中,由于设置了 t r a p命令,所以在捕捉到信号 2以后,双引号内的m y _ e x i t函数将被执行。函数m y _ e x i t将在脚本捕捉到信号 2后被调用;用户将会看到$L O O P变量的内容,即用户按时的计数值。在实际中,通常捕捉到信号 2后所调用的函数是用来完成清除临时文件等
12、任务的。下面是该脚本的运行结果:26.3.2 捕获信号并采取行动的另一个例子下面就是一个捕获信号后清除临时文件的例子。下面的脚本在运行时不断使用 d f和p s命令向临时文件H O L D 1.$和H O L D 2.$中写入相应的信息。你应该还记得$表示当前的进程号。当用户按 时,这些临时文件将被清除。第2 6章shell 工具295下载上面的脚本在运行时会产生如下的结果:当收到信号2或3时,尽管一般情况下这都不是误操作,但是为了安全起见,不妨给用户一个选择的机会,这样用户在不小心按下 后,仍然可以撤消刚才的动作。在下面的例子中,在脚本捕捉到信号 2后将会向用户提供一个选择,询问用户是否真的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINUX与UNIX SHELL编程指南026 LINUX UNIX SHELL 编程 指南 026
限制150内