关于shell脚本和luainterface的一些思考

今天工作中遇到两个问题需要总结一下:

1.关于shell脚本,这是一个公司同事写的关于tomcat的shell脚本,具体内容就不探讨了,这里主要记录一下问题的
发现和解决。一开始,他的脚本是从网上直接复制下来的,里面有个函数老是报错,检查函数发现没有问题,根据我
的经验在终端命令行模式下运行set ff=unix,保存后发现函数没有报错。但接下来又报了另外一个错误,这是一个语
法错误,if与判断条件左中括号间少了一个空格,添加空格后解决。接下来还有问题,根据提示uary我发现有一个判
断条件使用了数组,大概类似这样[ $XXX ],前面又有XXX=$(ps -ef|grep -w 'tomcat'|grep -v 'grep'|awk '{print $2}'),
看到这里问题已经很明显了$XXX为一个数组,并且array不能作为判断条件,于是把判断条件改为[ -z "$XXX" ],
另外把他的脚本的第一句#!/bin/sh改为#!/bin/bash(这样做是因为兼容性考虑,ubunutu默认shell不是bash,并且不
支持数组)。到此为止shell脚本的语法问题解决了。但是运行时又出现了一个十分怪异的问题,每次运行都提示killed。
ps -ef|grep tomcat 发现tomcat已经关闭,但当脚本执行时[ -z "$XXX" ]条件一直不成立,通过打印确实不为空。然后
突然发现他脚本的名字叫tomcat.sh,问题就出现在这里,脚本执行后终端会自动fork一个tomcat.sh进程,在这个进程里
面获得了这个进程的进程号,并使用kill命令完成了华丽的自杀,自杀之后shell脚本肯定就马上结束退出,不
会再继续执行了。最后通过修改脚本名称解决了这个问题。

2.关于luainterface,这是一个lua的C#实现。一开始不知道有这个东西。我们的软件一直用的neolua,公司测试平台之所
以会引入lua,是因为新增了一个计算器功能calc函数,由于自己不想重复造轮子,再加上之前对neolua有所了解于是就把
它引入到我们的测试平台当中了。这对我们的测试软件来说是一个解放,如果自己实现的话要考虑堆栈、空格、括号、以及
不同运算符的优先级,这是有不少工作量的,但是使用lua后,一句代码return (表达式),就能解决所有计算问题,这里效
率一下子就体现出来了。由于一个偶然的机会,我看到了一篇博客,里面讲的是WOW里面使用luainterface实现lua与C#交互。
看到WOW我眼前一亮,高大上的魔兽世界使用的东西能low,于是我就百度、搜狗、必应搜索与之相关的信息,之所以不用google
是我发现我的浏览器google搜索好像不能用。找了半天发现几篇博客,但价值都不大。最后想起我经常上的网站,现今我
认为是最流行的代码托管网站github,我进去一搜,一下子就找到了源代码,激动之余我又再上面找了几个其它的C#lua源代码,
经过最后比较发现还是WOW的luainterface最强大,之所以说它强大是因为,官方lua有的功能它几乎都有,并且附带有C#独有的
用法和工具。脚本 print "hello world",官方lua是可以执行的,但是除了luainterface之外,其它的实现都不能正确运行这
句脚本,见微知著,从这里就可以看出它的强大之处。经过一番考虑,最终决定把以前的neolua替换为luainterface以适应以后
更加复杂的需求。

总结:不管做什么事情,遇到问题之后一定不要盲目,如果自己熟悉相关知识,要先根据提示信息分析问题,然后一步一步解决。对于自己未知的领域,要引入一个新的东西,一定要尽可能的多收集资料, 再从这些资料中找到最好的那个使用。另外,就是要不断扩展自己的知识面,这样遇到问题后就会有更多的选择。