Bash shell script.sh轮询目标OID的网络范围,更改第4个八位位组10.46.32.x
。
我想扩展民意调查的范围,包括第3个八位字节10.46.x.x
如何为第三个八位字节添加另一个"" 循环?
#!/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...'
答案 0 :(得分:3)
如果您要求嵌套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
来运行一个简单的测试来掌握它的工作原理。
答案 1 :(得分:0)
要补充Inian's cool answer,如果由于某种原因您更喜欢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;
还要注意,您不需要在算术扩展运算符中使用$
符号。