2017-08-21 28 views
0

このスクリプトをマルチスレッド化するのは難しいです。Bashスクリプトのマルチスレッド化

私はスクリプトを修正することができません。スタックに多くの例がないので、私は何を作り出しているのか分かりません。

#!/bin/bash 

function teste(){ 

    for i in $(seq 0 10); do 

    CONNECT_TIMEOUT=1 # in seconds 
    A="$1." 
    B=$i 
    IP_ADDRESS=$A$B 
    PORT="${2}" 

    set +e 
    data=$(curl --head -vs -m ${CONNECT_TIMEOUT} http://${IP_ADDRESS}:${PORT} 2>&1) 
    exit_code="$?" 
    data=$(echo -ne "${data}" | grep "Server: ") 
    set -e 

    if [[ ${exit_code} -eq 0 ]]; then 
    if [[ -n "${data}" ]]; then 
    echo -ne "${IP_ADDRESS} - ${data}" 
    else 
    echo "${IP_ADDRESS} - Got empty data for server!" 
    fi 
    else 
    echo "${IP_ADDRESS} - no server." 
    fi 

    done 

} 
function doexecute(){ 
set -e 

if [[ $# -ne 2 ]]; then 
echo "Usage: $(basename "$0") ip_address_number port" 
exit 1 
fi 

threads=10; 

threads=$(($threads - 1)) 

for thread in `seq $threads` 
do 
teste ${1} & 
done 
} 
doexecute 
+0

あなたの質問は不明です。実際の問題は何ですか?あなたはスクリプト内の何かを修正する必要がありますか? bashスクリプトをマルチスレッド化することはできません。同時に複数のコマンドを実行する場合は、ジョブを使用する必要があります。 – arco444

+0

マルチヘッドでこのIPSシーケンスを回転させる必要があります – LucianoMallmann

答えて

0

あなたdoexecute関数は、エラーメッセージを表示して終了(ないリターン)を印刷し、他の2つの引数を期待しています。したがって、引数なしで呼び出すと、呼び出すシェルが終了します。