Оператор сценария Bash Case (логика if-not)

Он должен работать по умолчанию. Например. если я сделаю ls --color = always> / tmp / a , а затем cat / tmp / a , я увижу цвета. Проверка с помощью od подтверждает, что файл использует цвета ANSI.

Думаю, вам следует проверить, поддерживает ли ваш терминал цвета ANSI (и они включены).

1
09.03.2019, 12:45
1 ответ

Один вариант :сказать caseискать 0, и в этом случае :ничего не делать; иначе , выполните команду:

case X in
  (0) : ## do nothing
      ;;
  (*) truncate...
      ;;
esac

Другой вариант :указать caseискать любую цифру, отличную от -ноль:

case X in 
  ([123456789]) truncate...
esac

... но вместо того, чтобы сопоставлять числа с case, я бы использовалtest:

if [ "$(grep -c ERROR /root/test/wayfile.log)" -gt 0 ]
then
  truncate...
fi

Я упростил grep... | wc -wдо grep -c, который запрашивает grepдля подсчета вместо привлечения wc.

Далее, поскольку вас на самом деле просто интересует, существует ли вообще слово ERRORв файле,вы можете просто спросить grep, есть ли он там:

if grep -F -q ERROR /root/test/wayfile.log
then
   truncate...
fi

Флаг -Fсообщает grep, что искомый текст является простым ("Фиксированный" )текст --без регулярных выражений; флаг -qуказывает grep быть "тихим" --не считать и не выводить совпадающие строки, просто установить его статус выхода в зависимости от того, нашел ли он вообще искомый текст (или нет ). Успешный код завершения (, равный 0 ), указывает, что искомый текст был найден в файле хотя бы один раз; сбой означает, что искомый текст вообще не был найден в файле.

4
27.01.2020, 23:18

Теги

Похожие вопросы