В ответе, на который вы ссылаетесь в своем вопросе, используется расширенный синтаксис проверки bash (двойная скобка), тогда как вы пытаетесь использовать оператор проверки POSIX с одной скобкой. Разница в том, что в тесте с двойными скобками правая часть ==
рассматривается как шаблон, а не подвергается разбиению на слова или расширению glob. Таким образом, если [ $f == *.a ]
приводит к ошибке [: слишком много аргументов
, вы можете сделать
for f in *; do if [[ $f == *.a ]]; then echo "$f"; fi; done
или (более компактно)
for f in *; do [[ $f == *.a ]] && echo "$f"; done
Альтернативно, поскольку вы, похоже, используете bash
, вы можете использовать оператор =~
регулярного выражения e. например,
for f in *; do if [[ $f =~ \.a$ ]]; then echo "$f"; fi; done
или (более компактно)
for f in *; do [[ $f =~ \.a$ ]] && echo "$f"; done
хотя в данном случае это излишество.
Исследуем эту строку:
usep=$(awk '{ if($1 > 60) print $0 }' $HOME/DBA/monitor/diskcheck.log | cut -d'%' -f1)
В этом случае $0
имеет значение 66 65 85 66
.
Таким образом, команда cut -d'%'
не может найти разделитель %
в таком значении и возвращает его как есть.
Должно быть:
usep=$(awk '{ if($1 > 60) print $1 }' $HOME/DBA/monitor/diskcheck.log
где $1
указывает на первое поле
То же верно и для строки:
usep1=$(awk '{ if($1 > 60) print $0 }' $HOME/DBA/monitor/log/disk_alert.log | cut -d'%' -f1)