学习了一段时间的shell编程,发现还是比较容易上手的,果然有了一定的C语言基础其他都好办!
某天突发奇想,想要用自己学过的shell语言来编写一个脚本,实现查看EI的FTP服务器是否在工作的功能。虽说可以直接登录试试就知道结果,但是也是为了好玩,也是顺便实践一下。PS:能够拿自己刚学会的知识来成功处理一个问题是一个很棒的过程!!
废话不多说,开始记录我编写这样一个shell脚本的全过程:
主体思路:想要确定一个服务器是否在正常工作,最简单的测试方法就是ping一下,如果ping完之后被ping的服务器能返回相同的ping数据包则表示它正常。(先要了解ping这个命令有什么用法,具体参考http://ei.vstu.cn/forum.php?mod=viewthread&tid=242)
尝试一:程序实现如下
运行脚本后得到结果:
结果是一直显示数据包信息,而且还要手动用Ctrl+C中断,非常不方便。
尝试二:程序实现如下
使用参数-c之后,限定了回应的次数,运行脚本结果如下:
可以实现自动停止ping,但是依旧显示出来太多东西,运行结果不是很友好,不太像一个程序。
尝试三:在ping后再加上参数-q,意思是不显示指令执行过程,开头和结尾的相关信息除外(蛋疼的地方)
结果如下:
显示出来的信息越来越少,好样的!!
尝试四:有没有办法然它直接显示“EI FTP Server is working
normally...”。想到这里,第一感觉是让ping在后台运行就好了吧。
于是又接着修改代码:
运行结果如下:
情况跟自己想的不一样,这一次脚本是执行了,但是需要按Enter后终端提示符才会再次出来。。。。然后尝试过命令行用括号括起来,后面是&符号,结果依旧。。。。
尝试五:又想到shell中执行命令行的返回值(主要是预定义特殊变量$?),运行成功则返回0。再次尝试一下吧,在先前的基础上修改程序如下:
运行结果,You are so
amazing!!!
待激动冷却之后,冷静下来,这程序还是不够科学。。。要是ping不通的话,照样有返回值,照样显示服务器正常工作
尝试六:加个判断语句来改善以上问题,修改之后的程序:
做的过程中发现前几次尝试脚本的第一行就写错了,指定脚本类型那一行。。。不过在运行脚本的时候直接指定了使用bash来解析脚本,所以没有提示错误!
Shell编程练习(一)——ping一下