Как добавить еще один цикл «for» в сценарии оболочки bash? - PullRequest
0 голосов
/ 25 мая 2018

Bash shell 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 ]

0 голосов
/ 04 июня 2018

В дополнение к крутой ответ Иниана , если вы по какой-то причине предпочли бы циклы в стиле 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;

А также обратите внимание, что вам не нужно использовать $ знак внутри арифметических операторов расширения.

0 голосов
/ 25 мая 2018

Если вы запрашиваете вложенный цикл 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.Вы можете попробовать запустить простой тест, выполнив echo {10..1..1}, чтобы понять, как он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...