【问题标题】:Ping hundreds in one script在一个脚本中 Ping 数百
【发布时间】:2013-02-03 12:34:12
【问题描述】:

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

ping server1.servername.com -n 20 | grep Minimum | awk '{print $3}' | sed s/,// >> Output.txt

这将 ping 服务器 20 次,并切断除最小 ping 数量之外的所有内容。如果我想对这些服务器中的 300 台进行 ping 操作,我将不得不将同一行粘贴 300 次......是否可以让它在一行中指定 1-300 之类的内容而不需要 300 行相同的内容?

【问题讨论】:

    标签: bash shell ping


    【解决方案1】:
    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
    

    更新:

    这是我在我的 cmets 中对下面这个答案提到的骇人听闻的想法。警告:我认为我的 ping 命令必须与您的不同。我正在 Debian 机器上构思这个想法。

    我的ping 语法不是-n count,而是-c count,而不是包含“Minimum”的行,我有“min/avg/max/mdev”。所以你可能需要使用grep 语法等等。无论如何,考虑到这一点,根据需要修改以下内容,以从 1 到任何直到出错的顺序执行每个服务器的 ping。

    #!/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,并且循环将中断。

    【讨论】:

    • 哦,不错。如果您想提示用户您要 ping 多少次怎么办,我知道您可以手动编辑文件并将 20 更改为任何数字,但是是的。
    • 文字 300 可以替换为变量。该变量可以通过多种方式填充。但如果是我,我感觉很hackish,我可能会做一个while循环,测试while ping不会出错,增加服务器编号和循环。
    • @Aaron - 我刚刚添加了我在之前评论中提到的 while 循环。您可能会发现它很有用。
    【解决方案2】:

    你可以使用循环:

    while read line
    do
        ping $line.servername.com -n 20 | grep Minimum | awk '{print $3}' | sed s/,// >> Output.txt
    done < servers_list
    

    【讨论】:

      【解决方案3】:

      听起来像是xargs 的工作,例如,

      $ cat server-list | xargs -I% ping % -n 20 ...
      

      【讨论】:

        猜你喜欢
        • 2012-08-19
        • 2022-10-23
        • 1970-01-01
        • 2013-11-25
        • 2010-12-16
        • 1970-01-01
        • 1970-01-01
        • 2018-04-09
        • 1970-01-01
        相关资源
        最近更新 更多