使用shell,如何跳至for循环中的下一个元素?

问题描述 投票:0回答:1

这是我的脚本应该执行的操作:ping 5倍导入文本文件每一行的IP地址。如果IP在5次中无法访问到3次,则会回显“它关闭了!”。和(应该)移至下一个IP ...除了我不知道如何配置此“跳过”部分。这是我当前的代码:

FILE=file.txt
unreachableIP=0

while IFS='' read -r line || [ -n "$line" ]; do
    set -- $line

    for (( i=1; i<=5; i++ ))
    do
        echo "Ping $1 $i times"
        ping -c 1 $1
        if [ "$?" = 0 ]
        then
            echo "reachable"
        else
            echo "unreachable"
            ((unreachableIP++))
            echo $unreachableIP
            if [ $unreachableIP -eq 3 ]
            then
                echo "it's down!"
                unreachableIP=0
            fi
        fi
    done
done < $FILE

例如:如果IP地址是第一次,第二次,第三次和第四次都不可达,我希望脚本移至下一个IP(下一行),而不是尝试第五次ping通。这是file.txt

8.8.8.8 GoogleDNS
1.1.1.1 CloudFlareDNS
213.1.1.1 SomeFakeIPForDebug

感谢您的帮助。

linux shell
1个回答
1
投票

使用break实现您正在谈论的“跳过”功能。

例如

if [ "$unreachableIP" -eq 3 ]; then
   break
fi

它将退出当前循环。


0
投票

继续

中断和继续循环控制命令[1]与其他编程语言中的对应部分完全对应。 break命令终止循环>(中断它),而continue则跳转到循环的下一个迭代,>跳过该特定循环周期中的所有其余命令。

请参见http://tldp.org/LDP/abs/html/loopcontrol.html

© www.soinside.com 2019 - 2024. All rights reserved.