2016-01-31 3 views
0
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:. Нет такого файла или каталога"Я пытаюсь проверить переменную значения ping, что я делаю неправильно?

ответ

0

Есть целый ряд проблем здесь ...

  • Вам нужен $ как для расширения переменной (так что используйте $ping_average вместо просто ping_average) и подстановки команды (так что используйте $(ping ...) вместо просто (ping ...)).
  • Вам нужно пространство между awk и его аргумент. В оболочке пространства - важный синтаксис; вы не можете просто добавлять или удалять их в большинстве мест.
  • bash не выполняет арифметику с плавающей запятой (даже для сравнения), поэтому вам нужно посмотреть только на целую часть результата ping. Вы можете сделать это, добавив | cut -d . -f 1 в ping-конвейер.
  • Вторая строка полна фантастических («умных») двойных кавычек, которые оболочка будет рассматривать как обычные символы и запутаться. Используйте редактор, который не «помогает» конвертировать простые кавычки в причудливые версии.
  • < обрабатывается как перенаправление ввода (то есть читается из файла с именем «176») - вам нужно либо использовать [[ ]] вместо [ ], либо указать/уйти от него. Но не делайте этого, потому что ...
  • В тестовом выражении < выполняет сравнение строк вместо численного сравнения. Например, [ 9 '<' 176 ] будет ложным, потому что «9» появляется после «1» в порядке сортировки. Вместо этого -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 ...), чтобы рассказать вам многое.

+0

Хорошо, спасибо огромное! – hawaii12

Смежные вопросы