сценарий оболочки telnet пропустить цикл while в первой точке

Я использую следующий сценарий оболочки для проверки набора IP-адресов и портов из файла csv. Но он всегда прерывает цикл 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

person sugunan    schedule 11.04.2016    source источник
comment
Попробуйте вставить свой скрипт в shellcheck... shellcheck.net   -  person Mark Setchell    schedule 11.04.2016


Ответы (1)


Команда telnet выходит из родительской оболочки, если она выполнена успешно или неудачно. Вы можете использовать fork для запуска команд в фоновом режиме.

() — для запуска команд в подоболочках.

& - Переводит вызов функции в фоновый режим.

sleep - время ожидания завершения подшелла.

 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
person loganaayahee    schedule 11.04.2016
comment
Действительно хорошее решение. Большое спасибо. спать тоже стоит здесь. Но не мог понять, почему? - person sugunan; 11.04.2016