使用一个简单的for循环和if判断语句实现某个网段内所有ping所有客户机的shell程序:
for i in {1..254} do if ping -c 1 192.168.10.${i} >/dev/null 2>&1; then echo " ${i}通" else echo "${i}未通 " fi done
在这里i是一个循环变量,一共循环254次,${i}相当于192.168.10.0这个网段中从1~254的主机号。
for循环开始然后进行if判断:
判断 ping 192.168.10.xxx这个网段中的所有主机号中如果是标准输出就 ">"(重定向到)/dev/null这个文件中
then 如果是标准输出 那么就显示 ${i}(这个主机)通
"2>&1" 表示错误输出同样重定向到/dev/null文件下
else 如果是错误输出 那么就显示${i}(这个主机)不通
在这段程序中 ping -c 1 表示每个主机只ping一次。
这段程序中主要的点就是 ”192.168.10.${i} >/dev/null 2>&1“
首先要明白 dev下的null文件有什么用。这个null文件相当于windows下的回收站,但是在这个null中的东西是无法恢复的。
在这里ping 每个客户机时如果有返回值也就是ping通了,那么就属于一个标准输出这个标准输出就把他丢到 /dev/null中 如果不这样做你ping的返回数据会占用系统的某个空间。 在这里所有标准输出都会是1 而 2就表示错误输出 ,&符号表示等同于 “2>&1” 这里就表示 错误输出 等同于 标准输出(不代表 错误输出 等于 标准输出) 这样才能将错误输出也放到/dev/null中。
通过这样一个for循环加if判断就能实现ping所有主机号并返回一个 通 或者 没通 的信息。