目标:执行一个命令,由输出判断此命令执行正确与否,由此再执行另一命令.
①命令m 成功:显示successful,失败:显示 failure或error
②导入到日志~/log
③搜索日志关键字
④判断结果进入分支,执行不同命令
m > ~/log
cd ~
grep "successful" log
if [ $? = 0 ];then
mutt "" | "成功subject" [email protected] -c [email protected] -a "log"
else
mutt "" | "失败subject" [email protected] -c [email protected] -a "log"
fi
所遇问题:
判断问题,怎样才能判断出①执行正确与否
老大提示从执行结果判断,我总觉得m不管怎样都能执行,只是输出内容有不同,所以pc不能判断出它的执行效果.故仍从日志中关键字着手判断.
因错误结果多样,而正确显示的均为同样内容.故决定从"successful"此关键字判断
google一堆shell if用法,发现重点似乎不在此,又狂搜一堆grep 用法,参数...
1.grep 搜索出,则会显示出.故[ $? ]如有内容,则非空,执行"成功";无内容,空,"失败"---------判断失效,均显示成功,难道不管怎样都是有内容的,即"非空串"?
2.还是1)思路,换成[ -z $? ],-z表示非空为真----------结果同上
3.再次翻阅资料,grep搜索结果不光将搜索到的内容输出到终端上,还是有返回值的!成功为0,未搜到为1!故使用[ $? = 0 ],直接判断值!--------终于成功 ╭(╯^╰)╮
[注]$? - 代表上一命令执行返回值
具体见"shell参数列表"http://blog.chinaunix.net/u2/76419/showart_1800208.html
还有一个和c语言对比的,有意思 http://blog.csdn.net/kwiner/archive/2009/04/05/4049640.aspx
[注]上午还有一个幼稚问题,不管怎么弄,都提示
. / nb - mail.sh: line 8 : syntax error near unexpected token ` else '
. / nb - mail.sh: line 8 : ` else '
为什么为什么!!
我注意了 if 与 [ ]的关系, [ 也算是关键字
注意了 [ ] 两边要有空格
知道 else和fi,如与上一语句同行,要有 ; 否则不用
最终结果,因为 'then' 是必须的!
2呀,别给自己找理由,一定要严格遵循语法,错误的产生别无他因,编程定要像女人般细心.
我的shell初体验,虽不难,仍问题多多,得勤练!问题解决,over