LINUX Shell脚本编程实例详解(一)上
LINUX Shell脚本编程实例详解(一)上
ping命令测试网段内主机的2例详解
使用linux已经有10来年了但是一直止于各种服务器的搭建和环境的调优,能力不能得到提升,今天突然下定决心学习Shell脚本编程,因此以网上广为流传的《Shell脚本100例》为基础学习、实验和笔记。
废话不说上栗子。
使用vim shell100-scanip-1.sh命令创建脚本文件
#!/bin/bash
for i in {1..254}
do
ping -c2 -i0.3 -W1 192.168.18.$i &>/dev/null
if [ $? -eq 0 ];then
echo "192.168.18.$i is up"
else
echo "192.168.18.$i is down"
fi
done
解释:
第一句 #!/bin/bash
在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本。
目前研发送测的shell脚本中主要有以下两种方式:
(1) #!/bin/sh
(2) #!/bin/bash
止于使用sh还是bash来解释的区别后边抽时间专门写一篇文章,这里不在详述
第二句 for i in {1..254}
do
......
done
是循环结构,for循环类似程序中的for循环,i为循环变量,循环变量值在in{}里依次循环,循环体从do开始,done结束。
第三句ping -c2 -i0.3 -W1 192.168.18.$i &>/dev/null
ping命令参数
-c2:设置完成要求回应的次数;这里设置为2是考虑网络路由的问题导致第一次ping不能返回而第二次ping可以返回的情况(具体原因请自行阅读网络原理)
-i0.3:指定收发信息的间隔时间(秒计),这里的时间是综合考虑ping命令返回超时的时间和每次ping的时间,原则应为:返回超时<i参数<ping命令发送间隔。
-W1:即超时时间(毫秒计),这里表示超时时间为1毫秒,也就是说一毫秒后ping命令结束。
&>/dev/null :表示将标准输出stdout和标准错误输出stderr重定向到null的设备中,也就是说不打印到屏幕上了,而且也不保存文件(放到名叫null的设备中——无底洞永远消失)。
第四句判断语句
if [ $? -eq 0 ];then
......
else
......
fi
if判断语句 [ ]中为判断表达式,$?表示最后运行是否成功,成功为0 不成功为1
第五句、第六句
echo "192.168.18.$i is up"、echo "192.168.18.$i is down"表示回显到屏幕上$i表示当前i变量的值
栗子1解释完毕,待续