linux菜鸟日记(4)

使用一个简单的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所有主机号并返回一个 通 或者 没通 的信息。

原文地址:https://www.cnblogs.com/zhangzhongming/p/5959377.html