for i in {1..255} do ip=118.25.100.$i ping -c1 -W1 $ip &> /dev/null if [ $? -eq 0 ] then echo"$ip is alive..." fi done
执行结果:
1
real 2m11.793s
执行时长约 2 分 12 秒,按顺序一个一个执行。
多进程并发执行
在循环块前后加大括号并放在后台执行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#!/usr/bin/env bash
for i in {1..255} do { ip=118.25.100.$i ping -c1 -W1 $ip &> /dev/null if [ $? -eq 0 ] then echo"$ip is alive..." fi }& done wait echo"all of finished..."
执行结果:
1
real 0m1.901s
效率提升了 60 多倍!
并发数量过大导致的问题
如果并发数量过大,系统可能无法处理:
1 2 3 4 5 6 7 8 9 10
#!/usr/bin/env bash
for i in {1..65535} do { tcping 118.25.100.250 $i | grep open }& done wait echo"all of finished..."