Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在一个脚本中Ping数百_Bash_Shell_Ping - Fatal编程技术网

Bash 在一个脚本中Ping数百

Bash 在一个脚本中Ping数百,bash,shell,ping,Bash,Shell,Ping,我想在一个游戏上ping一些服务器,它们都是相同的格式,只是可能有数百个。这是我目前使用的: ping server1.servername.com -n 20 | grep Minimum | awk '{print $3}' | sed s/,// >> Output.txt 这将对服务器进行20次ping操作,并删除除最小ping量之外的所有内容。如果我想ping 300台服务器,我必须将同一行粘贴300次。。。有没有可能让它在一行中只指定类似于1-300的内容,而不需要30

我想在一个游戏上ping一些服务器,它们都是相同的格式,只是可能有数百个。这是我目前使用的:

ping server1.servername.com -n 20 | grep Minimum | awk '{print $3}' | sed s/,// >> Output.txt
这将对服务器进行20次ping操作,并删除除最小ping量之外的所有内容。如果我想ping 300台服务器,我必须将同一行粘贴300次。。。有没有可能让它在一行中只指定类似于1-300的内容,而不需要300行相同的内容?

您可以使用循环:

while read line
do
    ping $line.servername.com -n 20 | grep Minimum | awk '{print $3}' | sed s/,// >> Output.txt
done < servers_list
您可以使用循环:

while read line
do
    ping $line.servername.com -n 20 | grep Minimum | awk '{print $3}' | sed s/,// >> Output.txt
done < servers_list
基本上是通俗易懂的英语,这意味着当退出代码=0且增量i时,在不断行的情况下回显服务器名称,并以200ms的间隔对其进行20次ping,从ping结果中删除一个十进制数,然后再加上一个相等的空格,以完成回显行。该模式与Linux iputils ping摘要中的最小ping时间结果相匹配。如果ping失败,退出代码将不等于0,循环将中断

基本上是通俗易懂的英语,这意味着当退出代码=0且增量i时,在不断行的情况下回显服务器名称,并以200ms的间隔对其进行20次ping,从ping结果中删除一个十进制数,然后再加上一个相等的空格,以完成回显行。该模式与Linux iputils ping摘要中的最小ping时间结果相匹配。如果ping失败,退出代码将不等于0,循环将中断。

听起来像是一个作业,例如

听起来像是一份工作,例如


哦,很好。如果你想提示用户你要ping多少次,我知道你可以手动编辑文件,把20改成任何数字,但是是的,300可以用一个变量代替。该变量可以通过多种方式填充。但是,如果是我,我觉得自己很黑客,我可能会做一个while循环,在ping没有出错的情况下进行测试,增加服务器号和循环。@Aaron-我刚刚添加了我在前面的评论中提到的while循环。你可能会发现它很有用。哦,很好。如果你想提示用户你要ping多少次,我知道你可以手动编辑文件,把20改成任何数字,但是是的,300可以用一个变量代替。该变量可以通过多种方式填充。但是,如果是我,我觉得自己很黑客,我可能会做一个while循环,在ping没有出错的情况下进行测试,增加服务器号和循环。@Aaron-我刚刚添加了我在前面的评论中提到的while循环。你可能会发现它很有用。
for (( x=1; $x<=300; x++ )); do ( ping server$x.servername.com -n 20 | grep Minimum | awk '{print $3}' | sed s/,// >> Output.txt ); done
#!/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"
$ cat server-list | xargs -I% ping % -n 20 ...