我已经编写了一个用于 ping 扫描的 bash 脚本,但是对于已关闭的主机,它需要更多时间,因此我尝试通过&
在最后使用来对 get_ip 函数进行多线程处理。但这似乎不起作用。我怎样才能编写脚本来更快地实现这一目标?
#!/bin/bash
get_ip () {
ping -c 1 $1.$i 1>/dev/null
if [ $? -eq 0 ] ; then
echo "Host $1.$i is up"
else
echo "$1.$i is down"
fi
}
if [ $1 ];then
for i in {0..255};
do
get_ip "$1" &
done
else
echo "Enter the IP address to scan"
fi
答案1
我不认为这个速度有什么问题。它很快就会做错事。你的问题是变量名。i
并且1
看起来很相似。不要混淆他们。
函数中还有$1
函数输入(即命令行参数),而不是脚本输入。
因此,让我们进行一些修复:
该函数现在使用其输入(整个 IP 地址)。
#!/bin/bash
get_ip () {
ping -c 1 $1 1>/dev/null
if [ $? -eq 0 ] ; then
echo "Host $1 is up"
else
echo "$1 is down"
fi
}
main 现在创建一个完整的 IP 地址,以传递给该函数。
if [ $1 ];then
for i in {0..255};
do
get_ip "$1.$i" &
done
else
echo "Enter the first 3 octets of the IP address to scan, as the 1st argument of this script."
fi