首页 > 解决方案 > 为什么 SNMP 或 SSH 会阻​​止 while 循环迭代?

问题描述

由于 SSH 和 SNMP,我正在编写代码以捕获有关路由器的信息。我在具有 4 种不同路由器配置的网络上工作。在我的脚本 bash 中,while 循环逐行读取路由器的 IP 地址,然后尝试了解配置并最终捕获有关我的路由器的信息。

为此,我使用了一个 while 循环,但它只针对一个 IP 地址运行……我假设问题来自 SNMP 或 SSH。

我尝试了while循环

echo $line

while 循环:

while IFS= read -r line
do
    echo
    echo "line : $line"
    echo

    typeRouter=""
    version=""


    # type multitech V4.1
    type=$(snmpget -v3 -u Ai -l authpriv -a SHA -A "pass" -x AES -X "pass" "$line" 1.3.6.1.4.1.995.14.1.1.8.3.0 | cut -d\" -f2 | cut -d. -f1 )
    if  [[ "$type" == "4" ]]; then
        typeRouter=2
        version=4
    fi


    # type sierra
    type=$(snmpget -v3 -u Ai -l authpriv -a SHA -A "pass" -x AES -X "pass" "$line" iso.3.6.1.4.1.20542.9.1.1.9.7.0 | cut -d\" -f2  ) 
    if [[ "$type" == "LX40" ]]; then
        typeRouter=3
    fi

    case $typeRouter in 
    2)
            echo "Mutlitech"

            # version 4.1 et ultérieur
            MultiV4 "$line" "$txtfile" "pass" "pass"
            ;;

    3) # TODO PASSWORD
        echo "Sierra"

        Sierra "$line" "$txtfile" "pass" "pass"
        ;;

    *)
        echo
        echo "Unknown router model, IP : $line"
        echo
        ;;

    esac

done < "file"

调用的函数

MultiV4 () {
    # "$1" : @IP
    # $2 : txtfile
    # "$3" : mdp snmp
    # $4 : mdp ssh

    # Files
    txtfile=$2
    model="Multitech"
    MACtxt="ephemere/mac.txt"


    MacAddressRouter=$(snmpget -v3 -u Ai -l authpriv -a SHA -A "$3" -x AES -X "$3" "$1" iso.3.6.1.4.1.995.14.1.1.5.1.0 | cut -d\" -f2)
    echo "Router MAC address : $MacAddressRouter"

    sshpass -p "$4" ssh -o StrictHostKeyChecking=no admin@"$1"  "cat /proc/net/arp" > "$MACtxt"

    rssiPacket=$(snmpget -v3 -u Ai -l authpriv -a SHA -A "$3" -x AES -X "$3" "$1" iso.3.6.1.4.1.995.14.1.1.3.5.0 | cut -d: -f2 | cut -d\" -f2 | tr -d dBm)
    echo "RSSI packet : $rssiPacket"

    firmware=$(snmpget -v3 -u Ai -l authpriv -a SHA -A "$3" -x AES -X "$3" "$1" iso.3.6.1.4.1.995.14.1.1.3.4.0 | cut -d: -f2 | cut -d\" -f2)
    echo "Firmware version : $firmware"

    echo "$MacAddressRouter", "$MacAddressPlayer", "$rssiPacket", "$model", "$firmware", "$imei", "$SIMStatus", "$operator", "$connectionType", "$IPaddress", "$SINR", "$RSRP", "$RSRQ" >> "$txtfile"
}

我的档案

10.252.144.138
10.252.144.140
10.252.144.23
10.252.144.15
10.252.144.134

你能帮我为什么循环只运行一次吗?

标签: bashsnmp

解决方案


我解决了这个问题

ssh -n 

去看看这个答案以获得更多解释:Shell script while read line loop stop after the first line


推荐阅读