rojo@aspire:~$ help for
<snip...>
for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done
Arithmetic for loop.
Equivalent to
(( EXP1 ))
while (( EXP2 )); do
COMMANDS
(( EXP3 ))
done
EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is
omitted, it behaves as if it evaluates to 1.
尝试这样的事情:
for (( x=1; $x<=300; x++ )); do ( ping server$x.servername.com -n 20 | grep Minimum | awk '{print $3}' | sed s/,// >> Output.txt ); done
更新:
这是我在下面对这个答案的评论中提到的骇人听闻的想法。警告:我认为我的 ping 命令必须与您的不同。我正在 Debian 机器上构思这个想法。
而不是-n count
我的ping
语法是-c count
,而不是包含“Minimum”的行,我有“min/avg/max/mdev”。因此,您可能需要使用grep
语法等。无论如何,考虑到这一点,根据需要修改以下内容以按顺序执行每个服务器的 ping 从 1 到任何直到错误为止。
#!/bin/bash
i=0
while [ $? -eq 0 ] && i=$(( i + 1 )); do (
echo -n "server$i min: "
ping server$i.servername.com -c 20 -i 0.2 | grep -P -o -e '(?<=\= )\d\.\d+'
); done
echo "n/a"
基本上用简单的英语,这意味着当退出代码 = 0 并递增 i 时,回显服务器名称而不使用换行符,并以 200 毫秒的间隔 ping 它 20 次,用(从 ping 结果中刮取)前面的十进制数完成回显等空间。(该模式与 Linux iputils 摘要中的最小 ping 时间结果匹配ping
。)如果 ping 失败,退出代码将不等于 0,并且循环将中断。