电脑技术学习

Unix文件备份利用While解决文件等待问题

dn001

  其次需要了解操作语句的编写技巧。有时候为了实现某些特定的需求,往往在while循环结构内部的操作语句部分,不会写一些实际的操作语句。而是将操作语句写在循环的外部。如上面这个案例中,笔者在内部的操作语句部分,使用了语句sleep 30。这是什么意思呢?如果结合整个While循环结构,他的意思就是,如果条件满足的话(profile配置文件不可读,即不存在),则每个30秒执行以下这个循环。如果条件不满足的话(profile配置文件可读,即存在),则跳出这个循环,然后执行后续的语句。也就是说,此时笔者将真正要执行的操作(启动某个安装进程),放在了循环的外部。而在循环内部使用sleep 30,用来控制循环执行的时间。当然,在这个循环内部也可以写一些实际性的操作。如在屏幕上或者安装日志中显示一些“找不到配制文件等类似的错误信息。往往这些类似友好的提示信息,可以提高程序的友好性。类似的处理机制还有很多。系统工程师需要在日常的工作中注意总结。另外,如果多看看其他工程师编写的脚本程序,往往能够从中获取不少有价值性的内容。模仿往往是在最短时间内增强自己业务能力的捷径。

  最后就是需要注意书写格式与规范方面的内容。在编写循环结构时,无论是while循环还是for循环,如果能够有意识的采用TAB键或者空格键,可以明显的提高代码的可读性。如循环内部结构的执行语句最好能够跟do或者done等关键字分行写,并且采用缩进的格式。虽然即时不遵守这些规则,脚本程序也没有实质性的影响。但是,对后续维护阅读的时候,会增加不少的困难。特别是当循环内部语句比较多的时候。所以对于这些代码编写规范,系统工程师最好还是需要遵守。毕竟对于一些复杂的功能,需要团队合作才能够实现。如果大家都能够遵守同一的书写规范,那么无疑可以提高团队的协作型。还有就是需要注意语法方面的内容,不do后面没有分号结尾符等等。这些语法性的错误系统在执行时会告知,所以问题不大。只是会增加返工的几率与工作量而已。

  三、利用while实现无限循环。

  如上面那个数据库异地备份的案例,其实若能够通过无限循环来实现可能会更加的合适。如让操作系统每隔30分钟来执行一次循环。循环内不能的操作就是先利用if语句来判断备份文件是否在30分钟内更新过。如果有更新的话,就将其复制或者移动到远程的服务器上。不管有没有更新,这个循环的话,每30分钟就需要执行一次。此时就需要用到无限循环。利用while循环条件的含义,这个无限循环很容易实现,只需要循环条件语句设置为true即可。即while true ; do 操作语句 ;done &。

  在这个循环结构中,笔者采用true作为循环条件,其循环条件永远为真,那么操作系统就会一直循环下去,直到用户手工终止。另外需要注意的是,如果循环语句比较简单,可以在同一行中书写。只是在中间合适的位置(如关键字之前)需要加以分号来进行识别。另外,为了避免对其他进程进行干扰,最好将这些无限循环的操作放置到后台运行,这可以保障各个进程之间相对的独立性。此时只需要在done关键字后面加入&符号即可,就可以告诉操作系统将这个无限循环放入到后台运行。

  不过在编写无限循环的时候,需要注意死循环的发生。如循环内部的某个操作比较耗时。在这个操作还没有完成之前,新的循环又开始了。这久而久之,必将耗尽系统资源。为此,在程序内部最好还是需要设置一些条件,如CPU等资源的使用程度,来强制结束无限循环。笔者认为这是比较安全的处理方式,可以有效的避免无限循环影响操作系统性能。
;

标签: