2016-04-11 18 views
0

私は次のシェルスクリプトを使用して、csvファイルからipとportのセットをチェックしています。しかし、それは常にwhileループを壊し、最初の結果しか表示しません。しかし、どのようにエラーなしでスクリプトは最後の行にも到達します。どのようにループの問題を解決するには、telnetで?シェルスクリプト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

telnetコマンドはその成功または失敗した場合、親シェルを終了しています。 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

関連する問題