超时作为条件

timeout as a condition

我正在尝试使用 bash 脚本轮询一组具有多个 SNMP 社区字符串的设备。目标是,如果 snmpwalk 超时,它会尝试另一个字符串,但我的情况是错误的。

while read line
        do
                ip="$line"
                device=$(/usr/bin/snmpwalk -v 2c -c string1 $ip 1.3.6.1.2.1.1.1)
                if [ $device = false ]
                        then
                        device=$(/usr/bin/snmpwalk -v 2c -c string2 $ip 1.3.6.1.2.1.1.1)
                        if [ $device = false ]
                                then
                                device=$(/usr/bin/snmpwalk -v 2c -c string3 $ip 1.3.6.1.2.1.1.1)
                                break
                        fi
                fi
                echo "$ip $device"
        done < ip-list > device-type

我使用 -z 解决了这个问题并添加了 timeout -s KILL 2 因为它需要很长时间。

while read line
    do
        ip="$line"
        device=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c string1 $ip 1.3.6.1.2.1.1.1)
            if [ -z "$device" ]
                        then
                        device=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c string2 $ip 1.3.6.1.2.1.1.1)
                        if [ -z "$device" ]
                                then
                                device=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c string3 $ip 1.3.6.1.2.1.1.1)
                                if [ -z "$device" ]
                                        then
                                        device=$(echo " Not my problem ")
                                fi
                        fi
                fi
    echo "$ip $device"
    done < ip-list > device-list