如何在 bash 中对函数进行多线程处理?

如何在 bash 中对函数进行多线程处理?

我已经编写了一个用于 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

相关内容