shell 脚本 telnet 在第一点跳过 while 循环

shell script telnet skip the while loop at first point

我正在使用以下 shell 脚本来检查 csv 文件中的一组 ip 和端口。但它总是打破 while 循环,只显示第一个结果。但是脚本也没有错误地到达最后一行。如何解决 telnet 中的循环中断问题?

echo "starts"

    while read p; do
        if [ ! -z "$p" -a "$p" != " " ]; then
            IP=`echo $p | cut -d',' -f1`
            PORT=`echo $p | cut -d',' -f2`

            TELNET_STR=`telnet "$IP" "$PORT" | grep "Connected"`

            if [ ! -z "$TELNET_STR" -a "$TELNET_STR" != " " ]; then
                echo '[success]:'$IP':'$PORT
            else 
                echo '[failed]:'$IP':'$PORT
            fi
        fi
    done <telnet.csv

    echo "ends"

telnet.csv

234.253.245.23,80,1
234.089.108.216,8080,1
234.23.23.216,21,1

telnet命令退出父shell,如果成功或失败。 您可以使用 fork 运行 后台命令。

() - 运行 sub shells.

中的命令

& - 将函数调用置于后台。

睡眠 - 子 shell 完成的等待时间。

 while read p; do
        if [ ! -z "$p" -a "$p" != " " ]; then
            IP=`echo $p | cut -d',' -f1`
            PORT=`echo $p | cut -d',' -f2`
    (  sleep 2;
       TELNET_STR=`telnet "$IP" "$PORT" | grep "Connected"`
            if [ ! -z "$TELNET_STR" -a "$TELNET_STR" != " " ]; then
                echo '[success]:'$IP':'$PORT
            else
                echo '[failed]:'$IP':'$PORT
            fi
 ) &
        fi
    done <telnet.csv

输出

 [success]:192.168.12.14:22

 telnet: Unable to connect to remote host: Network is unreachable
 [failed]:234.253.245.23:80

 telnet: could not resolve 234.089.108.216/8080: Name or service not known
 failed]:234.089.108.216:8080