각 호스트 이름의 목록 인 for 루프를 통과하는 bash 스크립트를 작성한 다음 포트 22에서 응답하는 경우 각각을 테스트합니다 ssh 세션을 실행하지만 첫 번째 및 두 번째 if 문은 나머지 호스트가 아닌 목록의 첫 번째 호스트에서만 실행됩니다. 호스트가 포트 22에서 응답하지 않으면 스크립트를 다음 호스트로 계속 진행시키고 싶습니다. 스크립트가 각 호스트에 대해 ssh를 실행하도록하는 방법에 대한 아이디어가 있습니까? 이것은 루프를위한 또 다른 것이되어야 하는가?bash 스크립트의 for 루프 안에 중첩 된 if 문
#!/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
nmap'-P0'의 최신 버전에서는'-Pn'과 같은 것을주의하십시오. – sjsam
또한'test = $ (nmap $ host -P0 ...'줄은'test = $ (nmap $ host -P0 -p 22 | awk '/^22 \/tcp/{print $ 2} '' – sjsam