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コマンドはあなたのpingコマンドとは異なるはずだと思います。私はこのアイデアをDebianマシンで作成しています。
構文の代わりに-n count
、、および「Minimum」を含む行の代わりに、「min / avg / max/mdev」があります。したがって、構文などを試す必要があるかもしれません。とにかく、それを念頭に置いて、必要に応じて以下を変更し、各サーバーのpingを1からエラーになるまで順番に実行します。ping
-c count
grep
#!/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ミリ秒間隔で20回pingを実行し、エコーされた行を(ping結果からスクレイピングして)前に10進数を付けて完成させます。等間隔。(このパターンは、Linux iputilsの要約の最小ping時間の結果と一致しますping
。)pingが失敗した場合、終了コードは0に等しくなく、ループが中断されます。