我正在尝试测试ping值的变量,我做错了什么?

时间:2016-01-31 02:43:47

标签: macos variables terminal ping

    ping_average=(ping -c 10 na.leagueoflegends.com | tail -1|awk'{print $4}' | cut -d '/' -f 2)
    [ “ping_average” < “176” ] && echo “Play” || echo “No”

这个值似乎不起作用,我得到错误代码“'/'附近的意外令牌和176:没有这样的文件或目录。”

1 个答案:

答案 0 :(得分:0)

这里有很多问题......

  • 两个变量扩展都需要$(因此请使用$ping_average而不是ping_average)和命令替换(因此请使用$(ping ...)而不是(ping ...) })。
  • 您需要awk与其参数之间的空格。在shell中,空格是重要的语法;你不能在大多数地方添加或删除它们。
  • bash不进行浮点运算(甚至只进行比较),因此您只需要查看ping结果的整数部分。您可以通过将| cut -d . -f 1添加到ping管道来执行此操作。
  • 第二行充满了花哨的(&#34; smart&#34;)双引号,shell会将其视为普通字符而感到困惑。使用一个没有帮助的编辑器&#34;将简单引号转换为花哨的版本。
  • <被视为输入重定向(即从名为&#34; 176&#34;的文件中读取) - 您需要使用[[ ]]代替[ ],或引用/逃避它。但不要那样做因为......
  • 在测试表达式中,<执行字符串比较而不是数字比较。例如,[ 9 '<' 176 ]将是假的,因为&#34; 9&#34;来自&#34; 1&#34;在排序顺序。相反,-lt(如[ 9 -lt 176 ])。

所以,经过纠正后,我得到了:

ping_average=$(ping -c 10 na.leagueoflegends.com | tail -1 | awk '{print $4}' | cut -d '/' -f 2 | cut -d . -f 1)
[ "$ping_average" -lt "176" ] && echo "Play" || echo "No"

顺便说一句,我建议您通过shellcheck.net运行代码;它不会发现所有可能存在的问题,但它会指出许多常见的错误。但是,在这种情况下,它会被`ping_average =(ping ...)表达式混淆得太多了。