【问题标题】:Multithreading a Bash Script多线程 Bash 脚本
【发布时间】:2017-08-21 07:12:53
【问题描述】:

我发现多线程运行这个脚本很困难。

我无法修复脚本,我不知道自己犯了什么错误,因为堆栈中的示例不多。

#!/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

【问题讨论】:

  • 您的问题不清楚。您遇到的实际问题是什么?您需要修复脚本中的某些内容吗?您不能对 bash 脚本进行多线程处理,如果您想同时运行多个命令,则需要使用作业。
  • 我需要在 multitrhead 中旋转这个 IPS 序列

标签: linux multithreading bash


【解决方案1】:

您的 doexecute 函数需要 2 个参数,否则它会打印错误消息并退出(不返回)。因此,当您在没有任何参数的情况下调用它时,它只会退出调用 shell。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多