嵌套在bash脚本中的for循环中的if语句

时间:2016-06-29 16:30:14

标签: bash if-statement for-loop nmap

我正在编写一个bash脚本,该脚本经过一个for循环,这是一个每个主机名的列表,如果它在端口22上响应,则会测试每个,如果是,则执行ssh会话但是,第一个和第二个if语句只在​​列表中的第一个主机上执行,而不是在其余主机上执行。如果主机在端口22上没有响应,我希望脚本继续到下一个主机。任何想法如何确保脚本在列表中的每个主机上运行ssh?这应该是另一个循环吗?

#!/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

2 个答案:

答案 0 :(得分:3)

exit 0退出整个脚本;你只想继续循环的下一次迭代。请改用continue

答案 1 :(得分:0)

您的问题最有可能出现在

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

此处exit 0导致整个脚本在$result为空时退出。你可以使用:

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