bugfix> linux > 投稿

Bashシェルscript.shは、ターゲットOIDのネットワーク範囲をポーリングし、4番目のオクテット 10.46.32.x を変更します 。 3番目のオクテット 10.46.x.x を含めて、ポーリングの範囲を拡張したい

別の追加方法"にとって" 3番目のオクテットのループ?

#!/bin/bash
# snmpget command poll the network range for certain OIDs
for (( i=254; $i; i=$i-1 )) do 
    host=10.46.32.$i; 
    snmpget -v 2c -c public -t 0.5 -r 1 $host iso.3.6.1.2.1.2.2.1.6.1 iso.3.6.1.2.1.2.2.1.6.2; 
done;
read -p 'press Enter to continue...'

編集:2ループ

#!/bin/bash
# snmpget command poll the network range for certain OIDs
for i4th (( i=254; $i; i=$i-1 )) do 
for i3th (( i=254; $i; i=$i-1 )) do
    host=10.46.$i3rd.$i4th;  
    snmpget -v 2c -c public -t 0.5 -r 1 $host iso.3.6.1.2.1.2.2.1.6.1 iso.3.6.1.2.1.2.2.1.6.2; 
done;
read -p 'press Enter to continue...'

回答 2 件
  • ネストされた for を要求している場合  ループ、単純に内部で定義するのはどうですか?また、従来のCスタイルのループの代わりにブレース展開を使用できます

    for octet4th in {254..1..1}; do
        for octet3rd in {254..1..1}; do
            host=10.46.$octet3rd.$octet4th
        done
    done
    
    

    {254..1..1} を実行することにより 、従来の完全な長さのループを記述する必要はありません。一度に1つずつ減らすだけで機能します(最後の 1 )値 1 まで 。 echo {10..1..1} を実行して簡単なテストを実行してみてください。  それがどのように機能するかを把握します。

  • Inianのクールな答えを補完するために、何らかの理由でCスタイルのループを好む場合:

    for (( i4th=254; i4th; i4th=i4th-1 )) do
        for (( i3th=254; i3th; i3th=i3th-1 )) do
            host=10.46.$i3th.$i4th
            snmpget -v 2c -c public -t 0.5 -r 1 $host iso.3.6.1.2.1.2.2.1.6.1 iso.3.6.1.2.1.2.2.1.6.2
        done;
    done;
    
    

    また、 $ を使用する必要がないことに注意してください。  算術展開演算子内で署名します。

あなたの答え