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非常に似ているようです。混同しないでください。

function内には、スクリプト入力ではなく$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

おすすめ記事