我正在尝试创建一些简单的通过/失败测试脚本,但我遇到了一些挑战,如下所述。我的目的是将命令(例如 ping)的完整结果results.txt保存到一个文件中,但results.txt如果检测到问题,还要解析文件以进行不同的检查:
#!/bin/bash
ping -c 20 google.com > results.txt
packetloss = `awk '/packet loss/{x=$6} END{print x}' results.txt`
echo "$packetloss" >> debug.txt
# if packetloss > 0, add to an error.txt to fail
# if avg ping time > 5ms, add to an error.txt to fail
Run Code Online (Sandbox Code Playgroud)
packetloss 变量没有awk从results.txt文件中获取信息(发送到调试文件进行查看)。我想知道是否有关于 shell 脚本的东西可以防止这种情况以及相关的解决方法?
手动运行awk上results.txt返回“0%”,这是预期的结果。
Gil*_*not 11
周围不允许有空格=!
所以:
#!/bin/bash
ping -c 20 google.com > results.txt
packetloss=$(awk '/packet loss/{print $6}' results.txt)
echo "$packetloss" >> debug.txt
Run Code Online (Sandbox Code Playgroud)
或者更短:
ping -c 20 google.com |
awk '/packet loss/{sub(/%/, "");print $6 >> "debug.txt"}'
Run Code Online (Sandbox Code Playgroud)
x变量;可以$6直接打印。`用于旧式命令替换,例如:
foo=`命令`
foo=$(command)建议改为使用语法。内部反斜杠处理$()不那么令人惊讶,并且$()更容易嵌套。
检查http://mywiki.wooledge.org/BashFAQ/082
ping -c 20 google.com |
perl -lne '/(\d+)%\s+packet\s+loss/ and print $1' >> debug.txt
Run Code Online (Sandbox Code Playgroud)