Есть целый ряд проблем здесь ...
- Вам нужен
$
как для расширения переменной (так что используйте $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 ...), чтобы рассказать вам многое.
Хорошо, спасибо огромное! – hawaii12