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



我正在使用以下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在后台运行命令。

()-在子shell中运行命令。

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

sleep-等待子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

相关内容

最新更新