shell脚本ping -w用法

今天写了一个循环ping的脚本用来扫描网段中一些不通的ip地址,代码如下:

#!/bin/bash

ping_info(){

ping -c 2 -w 1 $1;

if(($?!=0));

then echo $1 >> /tmp/iplist;

fi;

}

for i in `seq 129 254`;do

ip_dx=192.168.1.$i

ip_lt=192.168.2.$i

ip_yd=192.168.3.$i

ping_info $ip_dx

ping_info $ip_lt

ping_info $ip_yd

done

执行之后发现一个问题:无论地址能不能ping通,都写入到了/tmp/iplist中了,与脚本的初衷不符。

后将命令:ping -c 2 -w $1 单独拿出来运行分别用了一个通的ip和不通的ip做测试,发现echo $?的值都为1。

ping -c 2 -w 1 ip: -c 2的意思为ping两个包,-w 1的意思为等待时间为1秒(为了节约执行脚本的时间),问题就出在这个-w 1这里。根据环境的差别,ping的延时不通,ping两个包的时间也不通。我这里用time测试,ping两个包的时间大于1秒。所以如果指定超时时间为1秒的话,第二个包可能没有ping完就被结束了,所以echo $?结果为1。后将超时时间设置为3秒之后,脚本成功运行。

#!/bin/bash

ping_info(){

ping -c 2 -w 3 $1;

if(($?!=0));

then echo $1 >> /tmp/iplist;

fi;

}

for i in `seq 129 254`;do

ip_dx=192.168.1.$i

ip_lt=192.168.2.$i

ip_yd=192.168.3.$i

ping_info $ip_dx

ping_info $ip_lt

ping_info $ip_yd

done

时间: 2024-08-01 02:04:02

shell脚本ping -w用法的相关文章

转帖-shell脚本$与if用法

$# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 [email protected] 是传给脚本的所有参数的列表 $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ 是脚本运行的当前进程ID号 $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误 $! 后台运行的最后一个进程的ID号 [email protected] 与$#相同,但是使用时加引号,并在引号中返回

shell 脚本:ping一个网段的所有ip 和 隔一秒显示当前的时间

环境是 centos7  /bin/bash 注意在复制测试时,务必将示例中的ip网段更改为自己的ip网段. ctrl+z可以将脚本打入后台,然后查看进程kill掉. 1. #!/bin/bash for i in {1..254} #定义1到254 do HOST=192.168.168.$i ping -c 2 $HOST &>/dev/null if [ $? -eq 0 ];then  # -eq 判断返回值是否为0 $?为0表示执行结果正确 echo "$HOST IS

shell脚本的引用用法说明

#!/bin/bash#演示全引用和部分引用#双引号和没引号的区别variable1=2010echo "$variable1"echo $variable1variable2="x    y     z"    ##字符之间用多个空格隔开echo "$variable2"           ##双引号 echo $variable2             ##没引号 #单引号和双引号的区别echo "$PWD is the cur

shell脚本的测试用法

#!/bin/bash#1.整数比较运算符#整数变量和整数常量比较num1=15[ "$num1" -eq 15 ]    #测试num1是否等于15echo $?      ##退出状态为0,表示num1等于15 [ "$num1" -eq 20 ]   #测试num1是否等于20echo $?    ##退出状态为1,表示num1不等于20 [ "$num1" -lt 15 ]   ##测试num1是否小于15echo $?         

小黑的日常折腾-网段在线地址扫描shell脚本

学习Linux已经一个月了,不知不觉shell脚本的基本用法已经学习完了,为了检验自己的学习情况,在清明小长假期间花了点时间折腾出了这个脚本.该作品只是练手之作,如果有BUG,请留言指明,我会尽力完善. 该脚本需要用户给定两个参数,第一个参数是网段的起始ip地址,第二个参数是网段的结束ip地址.起始地址的ip地址最后一段必须是1,如192.168.0.1,结束ip地址的最后一位必须是254,如192.168.10.254.另外,起始和结束ip地址的第一段必须相同. 注意: 1.地址范围越大运行程

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

shell脚本中的dat,计算器,内置变量的用法

什么是shell脚本.首先它是一个脚本,并不能作为正式的编程语言.因为是跑在linux的shell中,所以叫shell脚本.说白了,shell脚本就是一些命令的集合.举个例子,我想实现这样的操作: 1)进入到/tmp/目录: 2)列出当前目录中所有的文件名: 3)把所有当前的文件拷贝到/root/目录下: 4)删除当前目录下所有的文件. 简单的4步在shell窗口中需要你敲4次命令,按4次回车.这样是不是很麻烦?所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完

shell脚本介绍,shell脚本结构和执行方式,date命令的用法,shell脚本中的变量简介

笔记内容: 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量 笔记日期:2017-11-21 20.1 shell脚本介绍 Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的.但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令