2016-04-11 8 views
0

Я использую следующий сценарий оболочки для проверки набора ip и порта из файла csv. Но он всегда разбивает цикл while и показывает только первый результат. Но любой, как без ошибок, скрипт достигает и последней строки. Как исправить проблему прерывания цикла в telnet?shell script telnet пропустить цикл while в первой точке

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 
+0

Попробуйте вставить скрипт в shellcheck ... http://www.shellcheck.net/ –

ответ

1

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

() - Выполнять команды в подклассах.

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

спящий режим - время ожидания для дополнительной оболочки.

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 
+0

Действительно хорошее решение. Огромное спасибо. сон тоже стоит здесь. Но не мог понять, почему? – sugunan