2009-09-27

回归生活常态

虽然昨天下决心今天好好放松,可早上也没睡懒觉,睡不着。

起床后先上网监视下我的系统的运行情况,一切正常。然后给YULEI打了个电话聊几句,昨天快下班时他在QQ上问候我,但我那时正忙,没心思。

中午发现一条短信通道不灵了,惊诧不已。如果前几天出现这种情况也就罢了,现在我相信系统在经过几天紧张的调整后已经很健壮了,我没有心理准备再去接受新状况了。后来知道那个号码欠费停机了,从我的角度说,这不算系统故障。不过从公司的角度说,这个事故也是应该杜绝的,嗯,管理问题。好在可以单独关闭问题通道,此外就再没什么状况了。

说好今天不做事的,可近来忙得比较狼狈,体力还没恢复,下午也不知道除了抱着电脑还能干啥,就慢悠悠地写了个shell script统计我的系统的日志。我很少有机会写这种东西,自然也不擅长,不过觉得把一堆奇怪的命令凑杂在一起挺有意思,用它做事会自我感觉很老练,精于此道的样子,呵呵。

在此过程中我体会到,程序写日志的动机有两种,一是为调试,二是为统计。为便于统计,日志格式得用心设计,从grep和awk的使用来看,一条日志中,相对稳定的字段应该靠前,这样它们能起到多级索引的作用,如果太分散,过滤起来会过度依赖正则表达式;字段之间要有清晰的分隔符,便于用awk提取字段。总之,日志越机械越好,而不是越自然越好。

——————- 内嵌笔记 ————————

顺便提一下今天第一次在bash shell script中笨拙地使用条件选择语句时的体会,这个体会就是,shell在解释程序时,空格很重要,它几乎是唯一的分隔符。在高级编程语言的表达式里,空格不是必需的,只是使代码看起来清爽罢了,比如C语言编译器不会认为a=2是一个词(token),但shell会。在bash shell script里,”a=2″ 和”a  =2″这两句话绝对不同,前者仅包含一个命令(定义变量a并赋值2),后者则包含一条命令和一个参数(a是命令,”=a”是参数)。对于习惯高级语言的人来说,shell中的if语句是个空格重灾区:

if   [   $1  ==  $2  ];then

if和[之间,[]与其内的表达式,以及逻辑运算符两边,都要空格,否则解释器就不会按我们期望的方式工作。此外,上面的语句有个问题,如果$2为空的话,解释器会抱怨缺少操作数,把变量放在引号里,让引号占位就可以了,这样:

if   [  "$1"   ==   "$2"  ];then

还有,执行算术运算的快捷写法是:

$((<expr>))

比如

sum=$(($yours+$mine))

<expr>里的空格使用是自由的,跟高级语言中一样,就是说上面的+号两边是否有空格无所谓。可能是因为”$((”已经明确地告诉解释器,后面直到”))”前,都是算术表达式。这个方法今天在《鸟哥的linux私房菜》里找到的,在翻看这本书之前,我不喜欢书名,现在觉得内容很好,对名字也就没了偏见了。

———————————————

晚饭前昏沉沉地睡了一觉,感觉体力怪好,饭后找出旱冰鞋出去溜了半个多钟头。回来后洗个澡,陪岳父边看电视边唠会儿。

从容不迫的生活才是我一直向往的。

P.S. 其实今晚本意是想抒发点别的的,只是没把握好主旨,下回。