如何为"添加另一个"在bash shell脚本中循环?

时间:2018-05-25 09:05:37

标签: linux bash shell

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...'

2 个答案:

答案 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;

还要注意,您不需要在算术扩展运算符中使用$符号。