ping测试-显示无法ping所花费的时间

时间:2019-01-21 08:57:09

标签: bash shell yaml pipeline

对GitLab较新,通过使用bash脚本文件进行简单的ping测试,我尝试获取测试的值,成功或失败以及ping的持续时间。

pingtest.sh文件

#!/bin/bash
count=$1
target=$2
testname=$3

ping -c $count $target >/dev/null 2>&1

if [ $? -eq 0 ]

then

echo $testname,Success,$(ping -c $count $target | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|')

else

echo $testname,Failure,$(ping -c $count $target | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|')

fi

.gitlab-ci.yml文件

image: centos

stages:
  - zero

job run_test_zero:
  stage: zero
  artifacts:
    when: always
    paths:
      - "report/*"
  script:
    - echo "TEST NAME|RESULT|DURATION" >> ./report/report.txt
    - chmod +x ./scripts/pingtest.sh
    - ./scripts/pingtest.sh 3 google.com pinggoolepass >> ./report/report.txt
    - ./scripts/pingtest.sh 3 google1.com pinggoolefail >> ./report/report.txt

report.txt文件

TEST NAME|RESULT|DURATION
pinggoolepass,Success,6.066
pinggoolefail,Failure,

我无法获取失败ping测试的持续时间。

请任何人建议并指导我

1 个答案:

答案 0 :(得分:0)

仅使用一次ping

首先,您不必执行两次ping。一次性提取退出状态和最长rrt时间的方法有多种。这是脚本的替代版本:

#!/bin/bash
count="$1"
target="$2"
testname="$3"

if time=$(set -o pipefail;
          ping -c "$count" "$target" 2>&- | awk -F/ 'END {print $6}')
then
    result=Success
else
    result=Failure
fi
echo "$testname,$result,$time"

或者您可以将if ... fi部分替换为

output="$(ping -c "$count" "$target" 2>&-)"
[ $? = 0 ] && result=Success || result=Failure
time="$(awk -F/ 'END {print $6}' <<< "$output")"

这两个脚本都等同于您的脚本,并且不会在ping失败的情况下显示时间。

失败时的测量时间

»获取持续时间«,您首先必须指定»持续时间«是什么。

如果您希望退出ping所花费的时间,请使用time命令,或者通过两次调用date或通过使用$EPOCHESECONDS来自己测量时间bash≥5.0。但是,该值没有意义,我不明白您为什么要打印它。

如果您要谈论超时(对于google1.com而言并非如此),您最好自己指定一个超时并使用该值。