2016-06-29 12 views
-2

Ich schreibe ein Bash-Skript, das eine for-Schleife durchläuft, die eine Liste jedes Hostnamens ist, testet dann jeden, wenn es auf Port 22 antwortet, wenn es dann ist Führen Sie eine SSH-Sitzung aus, jedoch werden sowohl die erste als auch die zweite if-Anweisung nur auf dem ersten Host in der Liste ausgeführt, nicht auf dem Rest der Hosts. Wenn der Host auf Port 22 nicht antwortet, möchte ich, dass das Skript mit dem nächsten Host fortgesetzt wird. Irgendwelche Ideen, wie man das Skript sicherstellt, führt das ssh auf jedem Wirt in der Liste durch? Sollte dies eine andere für die Schleife sein?Verschachtelte if-Anweisung innerhalb einer for-Schleife im Bash-Skript

#!/bin/bash 

hostlist=$(cat '/local/bin/bondcheck/hostlist_test.txt') 


for host in $hostlist; do 

test=$(nmap $host -P0 -p 22 | egrep 'open|closed|filtered' | awk '{print $2}') 

     if [[ $test = 'open' ]]; then 

         cd /local/bin/bondcheck/ 
         mv active.current active.fixed 
         ssh -n $host echo -n "$host: ; cat /proc/net/bonding/bond0 | grep Active" >> active.current 

         result=$(comm -13 active.fixed active.current) 

       if [ "$result" == "" ]; then 
           exit 0 
       else 
         echo "$result" | cat -n 
       fi 

     else 
       echo "$host is not responding" 
     fi 
done 
+0

Denken Sie daran, dass in späteren Versionen von nmap '-P0 'ist gleich wie' -Pn'. – sjsam

+0

Außerdem kann Ihre Zeile "test = $ (nmap $ host -P0 ..." durch "test = $ (nmap $ host -P0 -p 22 | awk '/^22 \/tcp/{print $ 2}) ersetzt werden. '' – sjsam

Antwort

3

exit 0 beendet das gesamte Skript; Sie wollen nur zur nächsten Iteration der Schleife übergehen. Verwenden Sie stattdessen continue.

+0

Du bist genau richtig! Danke :) – user3573036

0

Sie Problem ist höchstwahrscheinlich in den Leitungen

if [ "$result" == "" ] 
then 
exit 0 
else 
echo "$result" | cat -n 
fi 

Hier die exit 0 bewirkt, dass das gesamte Skript zu beenden, wenn die $result leer. Sie könnten den Weg herum mit:

if [ "$result" != "" ] #proceeding on non-empty 'result' 
then 
echo "$result" | cat -n 
fi