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
Denken Sie daran, dass in späteren Versionen von nmap '-P0 'ist gleich wie' -Pn'. – sjsam
Außerdem kann Ihre Zeile "test = $ (nmap $ host -P0 ..." durch "test = $ (nmap $ host -P0 -p 22 | awk '/^22 \/tcp/{print $ 2}) ersetzt werden. '' – sjsam