Я пытаюсь написать скрипт, который проверяет использование диска удаленными клиентами. В скрипте есть фильтр для осмысленного вывода:
...
ssh server "sudo df -Ph 2>/dev/null \
| tail -n +2 \
| grep -v tmpfs \
| grep G| sed s/%//g \
| sed s/G//g \
| awk '{ if($5 < 20) print $0;}'" #to get only disks that the usage is under %20
...
Эта командная строка успешно работает на машинах CentOS/RHEL, но в Ubuntu возникает ошибка команды awk, как показано ниже:
awk: cmd. line:1: { if( < 20) print bash;}
awk: cmd. line:1: ^ syntax error
Как сделать сравнение в awk в Ubuntu? Операторы типа "-gt, -ge..." тоже не работают.
решение1
Сравнение в порядке, проблема в том, что вы пропустили переменную для сравнения. Поскольку вся ваша строка команды SSH заключена в двойные кавычки, она $5
съедается вашей локальной оболочкой еще до того, как она доберется до 'ssh' – вы должны ввести ее как, \$5
чтобы избежать этого. То же самое касается и $0
последнего (обратите внимание, что сообщение об ошибке вместо этого говорит "print bash;").