2016-04-11 3 views
0

J'utilise le script shell suivant pour vérifier l'ensemble de l'adresse IP et du port du fichier csv. Mais il casse toujours la boucle while et ne montre que le premier résultat. Mais n'importe comment sans erreur le script atteint aussi la dernière ligne. Comment réparer le problème de la rupture de la boucle dans telnet?script shell telnet ignorer la boucle while au premier point

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

Essayez de coller votre script dans shellcheck ... http://www.shellcheck.net/ –

Répondre

1

La commande telnet est quitter le shell parent, si le succès ou l'échec. Vous pouvez utiliser fork pour exécuter les commandes en arrière-plan.

() - Pour exécuter les commandes dans les sous-shells.

& - Met l'appel de fonction en arrière-plan.

sleep - le temps d'attente pour le sous-shell est terminé.

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 

Sortie

[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

solution vraiment agréable. Merci beaucoup. dormir vaut également la peine d'être ici. Mais ne pouvait pas comprendre pourquoi? – sugunan